描述:
以exe形式实现的COM组件,能否象dll一样通过LoadLibrary,GetProcAddress来直接调用其接口函数?
因为公司目前有个项目要移植到其它非windows操作系统下,该项目中用COM技术实现的一段加密功能必须以另外的形式提供。目前手边有该COM组件的tlb和exe文件,接口函数的名称和参数也已知。能否用上面的方法调用呢?我这里测试的时候GetProcAddress总是返回NULL,GetLastError结果是127 找不到指定的程序。
测试用程序如下:
typedef int(*lpChange)(long, long, short,unsigned short,unsigned long,unsigned int,unsigned int);
HINSTANCE hDll; //DLL句柄
lpChange Fun = NULL; //函数指针
hDll = LoadLibrary("Vss.exe");
if(hDll == NULL)
unsigned long errorCode = GetLastError();
else
{
Fun = (lpChange)GetProcAddress(hDll, "vssgps_ChangeWGToCHINA");
if(Fun == NULL)
unsigned long errorCode = GetLastError();
else
{
int result = Fun(……);
printf("%d", result);
}
FreeLibrary(hDll);
}
解决方案1:
COM本来就是微软的东东,别的平台不一定支持COM,你的非WINODWS平台是指什么平台啊?都不写清楚,世界上有这个多操作系统。
解决方案2: 非windows系统下,PE格式的程序能执行吗?更不用说COM了,估计这个。。。很难。除非把这个程序放到一个运行windows系统的机器上,然后做一对类似proxy/stub的程序,一个在客户系统上,一个在windows系统上,通过网络通信。
另外COM的方法不是通过export function的形式实现的,所以不要再想GetProcAddress的事了。
不行啊,COM有COM的形式。
您可能想查找下面的文章:
- 大家好,我现在想做一个客户端activex和服务器通信,但有一些问题我不太明摆,请大家指点!请入内详看
- 想写个在IE里面的程序。兄弟门帮我想几本好书。内详
- 关于重定义错误,但是从网上找来的方法我自己却找不到要处理的东西,内详
- 怎么把一个Exe文件放在另一个Exe文件地RC资源里?然后怎样调用?(讨论)(内详)
- 我令程序EXE重启动时,如何确保第二个copy启动时原来的copy所调用的DLL已经完全退出?内详
- 如何生成DLL问题,内详
- 是不是有一种专门为接收消息而创建的窗口?内详
- ???为什么我用VC在ATL复合控件中调用BITMAP资源和自定义资源都不成功内详
- 一个简单的ActiveX程序,做下拉菜单(内详)
- 100分:请问通过IWebBrowser2IHTMLDocument2等接口如何得到IE浏览器中用户选中区的内容IHTMLSelectObject接口,内详