读书人

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

发布时间: 2013-02-19 11:11:41 作者: rapoo

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


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

读书人网 >VC/MFC

热点推荐