您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> VC/MFC >> 将C++的dll程序改为ATL的COM程序

将C++的dll程序改为ATL的COM程序

来源:网络整理     时间:2016/7/23 0:32:09     关键词:

关于网友提出的“ 将C++的dll程序改为ATL的COM程序”问题疑问,本网通过在网上对“ 将C++的dll程序改为ATL的COM程序”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 将C++的dll程序改为ATL的COM程序
描述:

请问 要将C++的dll程序改为ATL的COM程序。
COM程序调用C++ dll,包装一下接口,这样可以吗?C++有个结构体
struct abc
{
int a;
string b;
bool c;
};
COM的.h文件包含C++的头文件,这样可以使用C++ 中的结构体类型abc,但是COM的IDL文件怎么使用C++的结构体类型?如果在IDL文件定义一个相同名字的结构体类型abc,会报类型冲突错误。
1.COM程序调用C++ dll,包装一下接口,这样可以吗?
2. 有其他方式吗?
3. IDL可以包含C++的.h文件吗?这样就可以直接使用C++的结构体了。


解决方案1:

以后不要多次重复发帖,这贴你不用结,得到答案后提醒我关闭它,我另外补偿你分数

解决方案2:

struct abc
 {
 int a;
 string b;
 bool c;
 };
 是这样定义的。
interface Iabc : public IUnknown
{
[propget] HRESULT a([out, retval] int *a);
[propput] HRESULT a([in] int a);
// string  定义为 BSTR。
// bool 定义为 VARIANT_BOOL
};
这样你可以返回 Iabc 的接口。
使用 pabc->get_a(&a); 和 pabc->put_a(a); 来存取 a。
在脚本中获取 abc 的接口,此时 Iabc 必须继承于 IDispatch 。
var a = abc.a; 和 abc.a = a; 来存取 a。

解决方案3:

你没有理解 COM 组件的意义。
假定你的 COM 组件提供给 JavaScript 这样的脚本使用。
就算你提供了 UDT ,又能怎样在 JS 里面使用呢。
如果你的 COM 仅仅支持 C/C++ 呼叫,那么久多此一举了。
所以,通常的方法就是为你的 UDT 定义一个接口。
这个接口中使用 propget 和 propset 来存取属性。

解决方案4:

从c++角度来看,STRUCT只是一个默认访问权限为public的类,所以你可以同样为该结构体创建一个COM对象,为每个成员设置get与set接口

解决方案5:

在MSDN里面搜“COM Tutorial Samples”?


以上介绍了“ 将C++的dll程序改为ATL的COM程序”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2857919.html

相关图片

相关文章