将指针传递到DLL中的函数

本文关键字:函数 DLL 指针 | 更新日期: 2023-09-27 18:21:24

我遇到了一个严重的问题。我有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);时,我会得到以下正确的结果(当然,如果注释掉,不会发生错误。)

TestRS232.exe 中发生类型为"System.AccessViolationException"的未处理异常

附加信息:试图读取或写入受保护的内存。这通常表示其他内存已损坏。

有办法解决这个问题吗?

将指针传递到DLL中的函数

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

很抱歉提出这个问题,也感谢大家的帮助。