我的项目中有一个C++类需要供C#调用,我先把C++类封装成了一个COM组件,然后通过C#平台调用进行操作。大部份的函数都能正常操作,但是所有回调函数在我接到C++的回调并处理完成后会报内存错误。
C++类测试过没有问题,在C++项目中直接引用操作一切正常,封装时也没做太多动作,只是实例化一个全局对象,每个函数均执行对应的该对象中的公共方法。
这个问题难倒我好几天好,急盼大家帮忙出出主意。
C++类测试过没有问题,在C++项目中直接引用操作一切正常,封装时也没做太多动作,只是实例化一个全局对象,每个函数均执行对应的该对象中的公共方法。
这个问题难倒我好几天好,急盼大家帮忙出出主意。
解决方案 »
- 求C#读取XML字符串的完整代码
- Replace的使用?
- 问下Winform高级编程 需要会哪些?
- DataGridView行标
- Publish web site的作用是什么?
- 简易绘图工具的代码有没有
- 讨论:for语句里嵌套switch语句,switch语句的case语句中在嵌套for语句合适吗?
- 新手问题:弹出提示信息问题,在线等,马上给分!
- 我写控制台程序,总是报错cs5001:找不到程序入口!!请问譔如何解决??
- 关于程序远程升级的一些问题,欢迎大家讨论哦
- 很奇怪的问题: C#组件中引用了DirectX DLL, 造成调用它的C++项目调试时会自动中断!
- .NET WINFORM 添加切换按钮.急急急...
以下是相关的代码,请帮忙看一下:C++类中定义(COMM):
SetStatusCallback(void (*s)(char id[], int status))
COM 封装:
void G_SetStatusCallback(void (*s)(char id[], int status)) { g_comm.SetStatusCallback(s); } //g_comm是定义的一个全局C++类对象
C#中调用:
public delegate void StatusCallBack(string id, int status);[DllImport("MyCom.dll", EntryPoint = "G_SetStatusCallback")]
public extern static void APS_SetStatusCallback(StatusCallBack callback);public void statusCallBack(string id, int status)
{
MessageBox.Show(this, status.ToString());
}现在出错的地方在statusCallBack方法执行完成后,出错点好像是C++类的那个文件,但是如果把它放在C++项目中直接调用却没有任何问题。
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
把delegate做成一个类的成员变量。class WhatEver {
...
private StatusCallBack mCallBack = new StatusCallBack(this.statusCallBack);
}
但是我把delegate先定义好,问题还是同样存在
应该是委托定义的问题,要先new出来,作为类的成员变量,这样就不会被回收了
{
private StatusCallBack dgStatus; //delegate define public Form1()
{
dgStatus = new StatusCallBack(this.statusCallBack); //delegate define InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Server.APS_SetStatusCallback(dgStatus); //
} public void statusCallBack(StringBuilder id, int status)
{
APSAPI.APS_SendStatusOK(id.ToString(), status);
MessageBox.Show(this, status.ToString());
}
}