首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2013-02-19 
支持多种语言的接口,这个法子可行吗? http://www.codeproject.com/Articles/28969/HowTo-Export-C-classes

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

 
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接口就可以

热点排行