急!求标准C++与CLR的函数指针的互相调用方式!

IDE: VS2008
我在VS2008的C++ Win控制台,用标准C++写了一个类class ABCD,这个类里有两个函数指针,用于输出string msg给外部。

class ABCD{
void ( *UICallBackFunction_Output )( string msgIn );

//构造函数,把外部传进来的输出函数指针,赋值给内部的 UICallBackFunction_Output
ABCD( void ( *UICallBackFunction_OutputIn )( string msgIn ) ){
this->UICallBackFunction_Output = UICallBackFunction_OutputIn;
}

void Function( ){
//当需要输出消息时:
this.UICallBackFunction_OutputIn( "某消息" );
}
}

由于需要做界面,我用VS2008新建立了一个C++ CLR工程。CLR工程里,默认界面类为 Form1。
Fom1里,我新写了一个函数:
void CallBackFunction( string msgIn ){
this->textBox1.Text += msgIn;
}
这个函数就是用来给class ABCD当输出用的。

我在Form1的按钮单击事件函数里:
ABCD *newABCD;
newABCD = new ABCD( CallBackFunction );
//本来,这里就是把 Form1的CallBackFunction函数,传给class ABCD
//但是,由于Form1是委托的,因此这个CallBackFunction也是委托。
//请问,用什么方式,才能把 CallBackFunction 正确传递给 class ABCD ?
//谢谢先~

加个全局函数并导出:
__declspec(dllexport) NativeCallback(wchar_t *msg)
{
Form1.instance()->CallBackFunction(gcnew System::String(msg));
}
Form1.instance()表示Form1的对象指针,你可以看情况改成适合你自己的方式。

然后在你的本地代码里调用NativeCallback。
温馨提示:内容为网友见解,仅供参考
无其他回答

急!求标准C++与CLR的函数指针的互相调用方式!
Form1.instance()表示Form1的对象指针,你可以看情况改成适合你自己的方式。然后在你的本地代码里调用NativeCallback。

CLR组件开发之 基于C++ dll 与C++\/CLI dll与C#的数据类型对应关系_百度...
在这种情况下,采用C++\/CLI导出类的方式更为合适。核心实现采用C++ DLL,C++\/CLI则直接调用C++ DLL中的导出类,对外提供给第三方工程CLI类接口。不同开发语言之间的常用数据类型对应关系如下表所示:在进行函数参数返回时,需要特别注意数据类型的对应。例如,当函数参数需要返回int值时,C++中使用的是int&...

请教C#调用C++\/CLR中生成dll,类型转换有关问题
C#可以直接调用ref类,和.net类库内其他类一样 ref类的变量(字段)不能使Native C++类类型,可以是指向Native C++类类型对象的指针 ref类内部可以直接使用Native C++类类型,只需要导入相关头文件即可 ref类的函数(方法)参数可以直接使用Native C++类类型,但是C#无法理解这些参数 也就是说,public函数不...

C#调用c++dll中 函数带指针参数方法
C++ --- C 传入的char* ---string 传出的char* --- StringBuilder(预分配空间)short ---short char --- byte char[n] --- fixed byte[n]结构指针 ---结构指针 函数指针 --- 委托

__cdecl几种函数调用方式
_stdcall, 或称StandardCall,是C++的标准调用约定。参数同样从右向左压栈,但当调用类成员函数时,this指针会最后压入。参数由被调用函数在返回后自动清理,通过指令retnX完成,X表示参数的字节数。这种调用方式称为自动清栈,函数在编译时需要明确参数数量,调用者必须严格控制参数生成,否则可能会导致...

C++中两个类如何相互引用?
如果是函数的话, 一个函数A想要调用另一个函数B, 只需要保证A的实现代码前面有B的声明就可以了; 因为常用函数的声明是只含参数代码的(除非A的参数有B的函数指针, B也同样, 这样肯定不能互相调用, 他们之中肯定有一个不知道那个函数指针的类型 ), 互相包含的代码一般在定义(实现)中, 故保证所有...

C++类内函数相互调用
创建类只是建立一个模板,内部代码块的书写没有顺序要求;编译时编译器会把它们弄成一个标准化结构的东西。如果考虑你纠结的问题,那绝大多数类的写法都过不了编译,因为习惯上在类名后的public:后就写构造函数了,而常常这构造函数就要操作类中的private数据成员,而这private数据成员偏偏习惯上又是放在...

一个C++工程中不同文件之间的函数如何互相调用?
在2.cpp写 extern int a;(在全局范围写就可以了)之后就可以用a的值了。如果类型不是int,请自行修改。对于问题补充:增加一个与a同类型的全局变量,把a赋值给它,然后用上述方法。或者增加一个a的指针类型的全局变量,把a的地址赋值给它,然后用上述方法。

C++两个类之间的成员函数怎么相互调用,怎么老是报错。
class Test2{\/\/….int static __cdecl Compare(const void* elem1, const void* elem2) \/\/成员函数。\/\/其他不变} 改变后的代码编译顺利通过。原因是,static 类型的成员函数与类是分开的,其函数指针也不包含对象信息,与一般函数指针一致。这种方法虽然简便,但有两个缺点:1、被调用的函数成员...

c++里怎么把类中的函数的指针传递给另一个类呀
void (A::*ptrnonstatic)() = &A::nonstatic;\/\/虚函数取得的是虚函数表中的偏移值,这样可以保证能过指针调用时同样的多态效果 void (A::*ptrvirtual)() = &A::virtualmember;\/\/函数指针的使用方式 ptrstatic();(a.*ptrnonstatic)();(a.*ptrvirtual)();} ....

相似回答