将指针传递给DLL中的函数

时间:2012-01-26 10:16:51

标签: c# c++ c pointers dll

我遇到了严重的问题。我有C#代码加载用C编码的DLL,该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”类型异常

     

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

有一种方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

好的,问题解决了,错误更加明显我曾经想过:_SendFunc(...)的返回值不是int而是long,这导致上面的信息。

对不起这个问题,也感谢大家的帮助。