gpt4 book ai didi

c# - 将指针传递给 DLL 中的函数

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:00:18 27 4
gpt4 key购买 nike

我遇到了一个严重的问题。我有 C# 代码加载用 C 编码的 DLL,调用用 C++ 编码的 DLL。一切都很好,直到我想将数组指针从 C 级别传递到 C++ 级别。

C中的调用代码如下:

#include <windows.h>
#include <winbase.h>
#include <windef.h>

int sendDLL( int* , int );

typedef int (*SendFunc)(int*);

int sendDLL( int* msg , int msgLength )
{
int status = 0;
SendFunc _SendFunc;

HINSTANCE serialLibrary = LoadLibrary("sender.dll");

if (serialLibrary)
{
_SendFunc = (SendFunc)GetProcAddress(serialLibrary, "UssSend");
if (_SendFunc)
{
status = _SendFunc(msg);
}

FreeLibrary(serialLibrary);
}

return status;
}

现在真正的转折是传递指针是不够的:传递的消息将在 DLL 中被覆盖,我们需要再次读出它直到 _SendFunc(...) 返回。

如果我从 Visual Studio(最高级别 - C#)启动程序,当 status = _SendFunc=(msg); 被调用时,我会得到以下正确信息(这是肯定的,如果注释掉,不会出错。)

An unhandled exception of type 'System.AccessViolationException' occurred in TestRS232.exe

Additional information: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

有什么办法可以解决这个问题吗?

最佳答案

OK,问题解决了,错误比我想象的要明显得多:_SendFunc(...)的返回值不是int很长,这导致了上面的消息。

不好意思提问,也谢谢大家的帮助。

关于c# - 将指针传递给 DLL 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016610/

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