好的,所以:我必须在vb中创建一个.exe。这个.exe必须调用一个still,而那个still必须调用一个本机call (还在工作:( )。
真正的问题是:我有这个C动态链接库,我试图从.exe调用它,这样我就可以了解它是如何工作的。问题是:每次我尝试调用它时,它都会给我“错误53:找不到文件”。但!如果我指向同一位置的另一个DLL (一个更简单的DLL,没有任何外部包含和垃圾),它就可以工作。
为什么?除了dll itsels之外,我还需要在VB项目中包含其他内容吗?
@Edit1
我已经用C语言创建了一个调用该DLL的测试程序,它工作得很好。
我设法做了一些改变,现在我有另一个问题,这是更重要的。:(
我现在可以正常调用DLL了。问题是:我创建了一个用C语言调用VB6的DLL exe,我必须用C语言调用的函数名为"FindPIN“。也就是说,函数FindPIN使用CreateFile打开了一个COM端口。理想是:
(在VB6中)调用FindPIN -> (在C DLL中) FindPIN调用CreateFile并保存来自该端口的句柄->返回代码(如<0表示错误,yada yada)。
当我调用FindPIN时,它可以工作,但它总是返回-1。函数:
hSerialComm = Createfile (...);
if (hSerialComm == INVALID_HANDLE_VALUE)
return -1;这意味着它不能打开COM端口!:(
但是如果我尝试运行一个C exe,比如:
(在C.exe中)调用FindPIN -> (在C DLL中) FindPIN调用CreateFile并保存来自该端口的句柄->返回代码(如<0表示错误,yada yada)。
它工作正常,并且COM端口打开了!:(
除了函数的常见声明之外,我还需要在VB6中做些什么吗?我做的很正常,就像
Private Declare Function FindPIN Lib "pin.dll" () As Integer:(请帮帮我!!
发布于 2017-06-22 02:52:02
请张贴您的dll的FindPin函数的c声明。我猜你的函数没有返回short,但是它返回了int,是真的吗?
然后你必须在VB中声明函数的返回值为“Long”而不是“Integer”,因为
Integer = short = Int16和Long = int = Int32
https://stackoverflow.com/questions/39016567
复制相似问题