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 . 调用时总是出错. 找不到入口点..无法返回值... 需要详细的.谢谢!的主要内容,如果未能解决你的问题,请参考以下文章

vb.net如何调用dll(动态链接库)

如何从 C++ 调用 VB.NET DLL(也调用函数 - 不仅仅是 DLL 文件)

VB.net调用VC.net写的DLL出现“当前不会命中断点,还没有为该文档加载任何符号”!!急!急急!!!

用C语言如何写DLL动态链接库?VB.net 又如何调用其生成的DLL库?急急急!!!!在线等!!

vb.net如何动态调用WebService接口啊

vb.net把dll放到程序的Resources资源里面,能直接调用Resources里面的dll吗?