vb.net 如何调用dll . 调用时总是出错. 找不到入口点..无法返回值... 需要详细的.谢谢!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb.net 如何调用dll . 调用时总是出错. 找不到入口点..无法返回值... 需要详细的.谢谢!相关的知识,希望对你有一定的参考价值。
dll 文件已试过无法应用,,无法注册....
DLL在生成后,里内的函数会有变化,所以你要先用软件exesc查一下它变化的结果是什么之后这样写,我是用C#写的,对你应该有帮助
[DllImport("facecom.dll", EntryPoint = "?fnfacecom@@YAHXZ")]
public extern static int fnfacecom();
?fnfacecom@@YAHXZ
这个就是那个就是在软件里查到的改变后的结果,你写在入口号处就可以了
这个我用过了没问题 参考技术A 不同的dll编制的方式不同,从类型上还有的是库、有的是控件,并不是说一个方式可以打开大部分dll ,那么谁还制作dll,有安全性么 参考技术B 你要确保dll文件 有接入点啊。。。追问
调用的是dephi编写的dll...用dephi调用就可以..但用vb.net 和C# 都提示找不到接入点..
能提供一般的调用方法吗?
可能你那个库不支持vb.net 或C#调用吧。
将 char 数组发送到 DLL 调用“不知道如何转换参数”时出错
【中文标题】将 char 数组发送到 DLL 调用“不知道如何转换参数”时出错【英文标题】:Getting error when sending a char array to a DLL call "Don't know how to convert parameter" 【发布时间】:2016-06-06 17:19:35 【问题描述】:我正在尝试在 Python 中重新创建一个 DLL 函数调用。该代码使用 DLL 文件来设置各种材料设置的激光参数。这是原始的 C# 代码:
public bool ApplyLasFile(string strLasFile)
if (!File.Exists(strLasFile))
//MessageBox.Show("File not found", "Error", MessageBoxButtons.OK);
return false;
Char[] arr = strLasFile.ToCharArray();
ApplyLAS(arr, strLasFile.Length);
return true;
这是我的python代码:
def setLaserSettings(input):
#laserSettings(power (0-1000), speed (0-1000), height (0-4000), ppi (0-1000))
input=input.upper()
if(input=="ABS"):
settings=laserSettings(825, 1000)
elif(input=="STAINLESS"):
settings=laserSettings(1000, 84)
elif(input=="TITANIUM"):
settings=laserSettings(1000, 84)
else:
return False
charList=[]
for x in range (0, len(settings)): #convert string into c_char[]
charList.append(c_char(settings[x]))
#print charList
print ULSLib.ApplyLAS(charList, len(settings))
DLL 调用 ULSLib.ApplyLAS(charList, len(settings))
返回错误 ArgumentError: argument 1: <type 'exceptions.TypeError'>: Don't know how to convert parameter 1
。我一开始只使用list(settings)
代替ToCharArray()
,当这不起作用时,我根据Python ctypes 手册页构建了一个c_char 数组。但是,我仍然收到该错误。有人看到我错过了什么吗?感谢您提供的任何帮助。
编辑:我也尝试过 list(string)
和 list(charList)
并且都返回相同的错误。
【问题讨论】:
C函数ApplyLAS
的签名是什么?如果第一个参数是char *
,您是否尝试过传递c_char_p
值?
你说的是这个吗? [DllImport("RemoteCtrl.dll", CharSet = CharSet.Unicode)]
internal static extern bool ApplyLAS(Char[] FileName, int nLength);
这是 C# 源代码的顶部。
不,那是 C# 方法的签名。我是在DLL中C函数的签名之后。
Googleing what is a dll signature
只提出了与安全相关的内容。我将如何在 DLL 中查找 C 函数的签名? (注意:我能够得到这个工作,所以这纯粹是为了我自己的知识。)
***.com/questions/386133/…
【参考方案1】:
所以这很奇怪。函数调用需要一个 Char 数组,但是由于某种原因,将字符串海峡放入 python 中的函数调用似乎可以完成工作。我是 python 新手,所以希望有一天这对我有意义。
【讨论】:
【参考方案2】:我怀疑您的代码意外运行的原因是您在 DLL 中调用的 C 函数将 char *
作为其第一个参数。我猜它的声明看起来像:
bool ApplyLAS(char *filename, int length);
我在这里猜测返回类型,也很有可能第一个参数实际上是wchar_t *
,或者第二个参数是unsigned int
。我还假设您的 DLL 是从 C 代码编译的。它有可能是从其他语言(例如 Fortran)编译而来的。
char *
参数,例如我怀疑在 C 函数中的参数,通常是您将字符串传递给 C 的方式。Python 的 ctypes 模块会将 Python 字符串作为 char *
传递给 C 函数,从而可以轻松地将字符串传递给 C。
【讨论】:
以上是关于vb.net 如何调用dll . 调用时总是出错. 找不到入口点..无法返回值... 需要详细的.谢谢!的主要内容,如果未能解决你的问题,请参考以下文章
如何从 C++ 调用 VB.NET DLL(也调用函数 - 不仅仅是 DLL 文件)
VB.net调用VC.net写的DLL出现“当前不会命中断点,还没有为该文档加载任何符号”!!急!急急!!!