gpt4 book ai didi

c - 如何从 VBA 应用程序调用 C DLL 并返回数组?

转载 作者:行者123 更新时间:2023-11-30 16:29:50 24 4
gpt4 key购买 nike

我正在开发一个 VBA 应用程序,它通过 C DLL 写入和读取串行端口。在下面的代码中,我设法以字符串的形式将值返回到 VBA 代码中。

我想要做的是调用 DLL 中的函数并将返回值插入到数组中。我也不想在取回字符串后使用 split 函数将字符串解析为数组,因为我的 VBA 实现无法访问该函数。

C DLL 函数

void FAR PASCAL RxReadResponse(char* Response)
{
char TempChar; //Temporary character used for reading
char SerialBuffer[100];//Buffer for storing Rxed Data
DWORD NoBytesRead;
int i = 0;
char buf [20];
char bufFull [256];
long num;
long streamLenght;
do
{
ReadFile( hComm, //Handle of the Serial port
&TempChar, //Temporary character
sizeof(TempChar),//Size of TempChar
&NoBytesRead, //Number of bytes read
NULL);


SerialBuffer[i] = TempChar;// Store Tempchar into buffer
sprintf(buf,"%x",TempChar& 0xFF);
strcat(bufFull, buf);

if(i==0)
{
num = (int)TempChar;
streamLenght = num + 4;
}

i++;
}
while (i < streamLenght);

lstrcpy (Response, bufFull);
}

VBA声明

Declare Function RxReadResponse Lib "CDLL" (ByRef rxRead As String) As String

VBA 按钮点击

Sub Button2_EventClick()
Dim This As Object : Set This = Button2

Dim s

s = RxReadResponse

EditBox6.Text = s


End Sub

返回的字符串

0FB34CB45AB24BB45A4CB45AB24BB45A

VBA 的预期结果

s(0) = OF
s(1) = B3
s(2) = 4C
.
.
.
s(16) = 5A

我需要做哪些不同的事情?

最佳答案

VBA 可以直接将String 赋给字节数组。如果 dll 调用返回正确的字符串,只需重新分配它即可。

Private Sub Example()
Dim returned As String
returned = "0FB34CB45AB24BB45A4CB45AB24BB45A"
Dim cast() As Byte
cast = returned
Dim i As Long
For i = 0 To UBound(cast)
Debug.Print cast(i)
Next
End Sub

请注意,您可能需要检查编码器是否将 ASCII 返回值转换为宽字符,但如果是这种情况,您可以调用 StrConv 将其转换回来,或者直接跳过其他所有字符字节数组中的索引。

关于c - 如何从 VBA 应用程序调用 C DLL 并返回数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51580131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com