Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从VBA传递指针_Vba - Fatal编程技术网

从VBA传递指针

从VBA传递指针,vba,Vba,我试图在VBA中使用C DLL函数,但当调用它时,Excel崩溃。在VBA中,函数声明如下: Public Declare Function HR8_CONNECT Lib "D:xxxxx.dll" _ (ByVal PortCom As Byte, ByVal Mode As Byte, ByVal Config As Byte, ByVal Dbg As Byte, ByVal context As String) As Byte 我认为上下文参数有问题,它是指向无符号字符的指针。请参

我试图在VBA中使用C DLL函数,但当调用它时,Excel崩溃。在VBA中,函数声明如下:

Public Declare Function HR8_CONNECT Lib "D:xxxxx.dll" _
 (ByVal PortCom As Byte, ByVal Mode As Byte, ByVal Config As Byte, ByVal Dbg As Byte, ByVal context As String) As Byte
我认为上下文参数有问题,它是指向无符号字符的指针。请参见下面C函数的标题

extern "C" __declspec(dllimport) UCHAR HR8_CONNECT(UCHAR, UCHAR, UCHAR, UCHAR, UCHAR*);

我尝试了许多用于传递指针的变体,如
byval string
byref byte
,等等。。。但是Excel每次都会崩溃。

您是否尝试为每个参数和调用C函数后创建一个变量? 我试验了或多或少类似的问题,它来自指针发送的参数,而指针并没有直接声明

Dim paramPortCom As Byte;
Dim paramMode As Byte;
Dim paramConfig As Byte;
Dim paramDbg As Byte;
Dim paramContext As String;
Dim resultFn As Byte;

' Set value into each variable
paramPortCom := 123;
...

' Call C function
resultFn := HR8_CONNECT(paramPortCom, ...);

HR8\u CONNECT似乎是用
\uu cdecl
调用约定声明的。VBA只接受调用约定。您将无法从VBA调用此函数。为什么不使用IDL?您好,Meaden我将尝试理解您的建议,但是我是硬件开发工程师,我只是尝试制作一个接口来访问一些函数以进行进一步测试…谢谢!你好,Vincent,我知道,但是我在COM6上捕获了流量,我看到预期的数据在第95行和第97行中传递,但有些事情进展得不太顺利…最好的变体是通过引用传递上下文参数,这很奇怪,因为它的意思是指针指向指针…PS:我无法添加带有COM6捕获的打印屏幕…你好,卡米尔,我也用这种方式尝试过,但没有效果。。。非常感谢。