MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 支持多种语言的接口,这个法子可行吗?解决思路

支持多种语言的接口,这个法子可行吗?解决思路

www.MyException.Cn  网友分享于:2013-02-20  浏览:2次
支持多种语言的接口,这个法子可行吗?

 
http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes-from-a-DLL

(C Language Approach 这一节讲解的)

这篇文章提供了一个法子,  以C语言的形式的导出c++类。 

作者顺便提到:这种法子,可以让很多语言使用该dll

我不知道真假,因为不会其他语言 




方法大概如下:

dll里的接口的参数或者返回值类型
 
 #ifdef _cplusplus
 extern"C"
 {
 #endif
 typedef tagMyHandle {} * MyHandle;
 #ifdef _cplusplus
 }
 #endif
 


dll接口函数的参数类型是 MyHandle,通过MyHandle去 调用c++类。

一个接口函数:

MyHandle CreateObj()
{

CTest* pTest=new CTest();  //CTest是我们的类,屏蔽,不让用户知道,另外 很多编译器不支持c编译

return (MyHandle)pTest;
}


把CreateObj丢给用户


 
到达的好处:1.可以有效的保护c++代码,让用户不知道我们的关键代码,甚至类的声明都不知道!!!
 
2.由于用c编译方式提供 结构体,所以 很多语言应该支持可以识别这个MyHandle 。
 

这个法子可行吗?



------解决方案--------------------
看windows核心编程

dll那章节提到过可以!
------解决方案--------------------
嗯, 这个法子长常常用来为 c++ 的库, 提供 c api,

其实就是把 class 当作一个不透明的指针(句柄)了,

对象句柄由库创建, 调用时传递进去, 释放也由库完成.

------解决方案--------------------
这个就是导出一个对象指针的方式,这样不需要一个个导出所有的函数,而只用h文件,就可以根据对象访问到对应的方法了.

------解决方案--------------------
可行,但是这样对应成员函数的每个DLL导出函数都嘚带一个相当于this的句柄参数

临时需要把C++类做成C风格的DLL这样也能满足要求


------解决方案--------------------
scintilla 做法跟这个类似。
------解决方案--------------------
导出标准C接口就可以

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有