如何从vb6调用本机C DLL

时间:2016-08-18 11:03:44

标签: c dll vb6

好的,所以:我必须在vb中创建一个.exe。这个.exe必须调用一个vb dll,而vb dll必须调用一个原生的C dll(仍在处理:()。

真正的问题是:我有这个C dll,我试图从.exe调用,所以我可以学习如何继续前进。问题是:每当我尝试调用它时,它都会给我"错误53:找不到文件"。但!如果我指向同一位置的另一个DLL(一个更简单的DLL,没有任何外部包含和狗屎)它可以工作。

为什么呢?除了dll itsels之外,我还必须在VB项目中包含其他内容吗?

@ EDIT1

我已经在C中创建了一个调用该DLL的测试程序,它运行得很好。

我设法做了一些改变,现在我有另一个问题,这是更重要的方式。 :(

我现在可以正常调用DLL。问题是:我创建了一个在C中调用DLL的VB6 exe。 C中我必须调用的函数名为" FindPIN"。也就是说,函数FindPIN用CreateFile打开一个COM端口。意思是:

(IN VB6)调用FindPIN - > (在C DLL中)FindPIN调用CreateFile并从该端口保存Handle - >返回一个代码(例如< 0表示错误,yada yada)。

当我调用FindPIN时,它可以工作,但它总是返回-1。功能:

hSerialComm = Createfile (...);
if (hSerialComm == INVALID_HANDLE_VALUE)
  return -1;

这意味着它无法打开COM端口! :(

但是如果我尝试运行C exe,比如:

(IN C.exe)调用FindPIN - > (在C DLL中)FindPIN调用CreateFile并从该端口保存Handle - >返回一个代码(例如< 0表示错误,yada yada)。

它工作正常,COM端口打开! :(

除了函数的commom声明之外,VB6中还有什么必须做的吗?我正常地这样做,比如

Private Declare Function FindPIN Lib "pin.dll" () As Integer

:(拜托,帮助我!!

1 个答案:

答案 0 :(得分:0)

请发布您的dll FindPin函数的c声明。 我猜你的函数不会返回short但它返回int,是真的吗?

然后你必须在VB" As Long"中声明函数的返回值。不是"作为整数"因为

Integer = short = Int16Long = int = Int32