这种奇怪的问题,有没有谁遇到过 ?

66i88 2015-02-05 08:39:16
妖怪dll是别人写的,没有源代码。
这个问题很麻烦,为了搞清楚自己写了个DLL对比。
如果用脚本VBS ,两个dll 都可以正常调用。
通过 #import "*.dll" 提取 *.tlh,*.tli 文件,添加到工程中,可以编译通过,但是“妖怪”dll就是不正常。

void test()
{
CoInitialize(NULL);
CLSID clsid1, clsid2;
HRESULT hr1 =CLSIDFromProgID(OLESTR("妖怪"),&clsid1);
HRESULT hr2 =CLSIDFromProgID(OLESTR("自己"),&clsid2);

CComPtr<IUnknown> pUnk1, pUnk2;
hr1 = pUnk1.CoCreateInstance(clsid1);//pUnk1, pUnk2 两个可以获得正常值
hr2 = pUnk2.CoCreateInstance(clsid2);//说明两个 DLL可以正常加载

CComPtr<IMy01> p2; //自己的DLL,获取接口指针正常,
p2.CoCreateInstance(clsid2); //函数调用也正常
LONG r; p2->iAdd(7,2, &r);

CComPtr<IDxxx> p1; //妖怪DLL,OleView查看可以找到 IDxxx ,在*.tlh中可以找到 IDxxx,
p1.CoCreateInstance(clsid1); //按 . 后智能提示正常 ,
CComQIPtr<IDxxx> p11; // 实际运行时,两种指针类型都无法获取,p1 , p11 指针值始终为NULL,
p11.CoCreateInstance(clsid1);
CoUninitialize();
}



这个问题到底出在什么地方?会不会妖怪dll限制只能用脚本加载?
或者还有什么神秘绝技?

请大神们保佑指点一下。
谢谢。
...全文
119 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2015-02-05
  • 打赏
  • 举报
回复
错误返回值信息是什么 这个要具体分析一下
encoderlee 2015-02-05
  • 打赏
  • 举报
回复
CComPtr<IDxxx> p1; p1.CoCreateInstance(clsid1); CComQIPtr<IDxxx> p11; p11.CoCreateInstance(clsid1); 1.检查这两处CoCreateInstance的返回值,看看具体错误原因是什么。 2.pUnk1.CoCreateInstance(clsid1);这里已经创建了一个实例,接下来用 CComPtr<IDxxx> p1; pUnk1.QueryInterface(&p1); 看看p1能不能成功获取。 不行的话把妖怪.dll传上来帮你看看

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧