c - 如何从 vb6 调用 native C DLL

标签 c dll vb6

好吧,所以:我必须在 vb 中创建一个 .exe。这个 .exe 必须调用 vb dll,而该 vb dll 必须调用 native C dll(仍在处理该问题:( )。

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

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

@编辑1

我已经用 C 语言创建了一个调用该 DLL 的测试程序,并且它工作得很好。

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

我现在可以正常调用DLL了。事情是这样的:我创建了一个 VB6 exe,它调用 C 中的 DLL。 我必须调用的 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

:(请帮帮我!!

最佳答案

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

然后你必须在 VB 中声明函数的返回值“As Long”而不是“As Integer”,因为

整数 = Short = Int16Long = int = Int32

关于c - 如何从 vb6 调用 native C DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39016567/

相关文章:

c++ - std::vector 需要有 dll 接口(interface)供类 'X<T> 警告的客户端使用

c# - If 语句仅包含 "True"

events - 搜索VB6代码

c - 如何在Makefile中写入 "install"目标

c - 递归二分查找无法正常工作

c - lang使用的调用约定是什么?

c++ - 导出类成员

visual-c++ - 即使在项目属性中进行更改后也会出现错误 Please #define _AFXDLL or do not use/MD[d]

vb6 - 如何在 VB6 项目中添加多个现有表单?

c - 将字符串插入链表无法正常工作