急!求救,分不够再加。C#中调用C++写的DLL出错,大侠请出手相救。

dqycxf 2004-11-17 03:59:52
DLL中函数原型(C++写的):
typedef int (*STREAM_READ_CALLBACK )(ULONG channelNumber,
UCHAR *pStreamBuffer,
DWORD Length,
int FrameType);

#define IMEAPI extern "C"__declspec(dllexport)
IMEAPI int __stdcall RegisterStreamReadCallback(HANDLE hChannelHandle,
STREAM_READ_CALLBACK StreamReadCallback);

我在C#中定义:
unsafe public delegate int STREAM_READ_CALLBACK(ulong channelNumber,
byte* pStreamBuffer,
ulong Length,
int FrameType);

[DllImport("NV6000SDK", CallingConvention=CallingConvention.StdCall)]
public static extern int RegisterStreamReadCallback(IntPtr hChannelHandle,
STREAM_READ_CALLBACK StreamReadCallback);

我在C#里面声明了一个回调函数:
unsafe public static int OnData(ulong channelNumber,
                byte* pStreamBuffer,
                ulong Length,
                int FrameType)
{
  .
. //此处太多,已省略
.
return 0;
}

我在C#里面调用下面的函数时出错:
RegisterStreamReadCallback(i, new STREAM_READ_CALLBACK(OnData));

此时提示“MyProc.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。”

通过反复测试,估计是回调函数中第2个参数
 byte* pStreamBuffer
引起的,但我不知道如何解决此问题,望高手指教!!!!!
...全文
152 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
dqycxf 2004-11-20
  • 打赏
  • 举报
回复
delphi我也做了,出现同样的问题,但它原来的C++用起来确是好的!!!郁闷
pkzl888 2004-11-19
  • 打赏
  • 举报
回复
传递指针参数时最好用ref关键字(记不清楚了,可以查下msdn),不要用*吧。
xingbing 2004-11-19
  • 打赏
  • 举报
回复
我也有你同样的问题,只是我用delphi作的dll,也出错!你的问题解决了吗?我们能否联系一下!13041166190给我发短信!
a438 2004-11-18
  • 打赏
  • 举报
回复
关注中
dqycxf 2004-11-18
  • 打赏
  • 举报
回复
是不是我问的问题太难了,没人帮我顶的!!!
fellowcheng 2004-11-18
  • 打赏
  • 举报
回复
关注
dqycxf 2004-11-18
  • 打赏
  • 举报
回复
这里没有人可以指教吗?不是我写得还不够清楚?
a438 2004-11-17
  • 打赏
  • 举报
回复
顶一下!!!!
jxzhang615 2004-11-17
  • 打赏
  • 举报
回复
学习!!帮顶!!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧