有一个用com方式编写的dll
想用一个应用程序调用它
在dll程序中
Scenario File.idl文件里有这样的声名
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(9E002FAD-7201-4BE6-89F3-485A12FBE369),
dual,
helpstring("IScenarioFile Interface"),
pointer_default(unique)
]
interface IScenarioFile : IDispatch
{
……
[id(9), helpstring("method CloseFile")] HRESULT CloseFile();
…… };在Scenario File.h文件里,有这样一句话
EXTERN_C const IID IID_IScenarioFile;在应用程序里,我写了如下测试代码 IUnknown *pUnknown;
IScenarioFile *pIScenarioFile;
HRESULT hResult;
if(CoInitialize(NULL)!=S_OK)
{
MessageBox("Initialize COM library failed!");
return -1;
}
GUID ScenarioCLSID;
hResult = ::CLSIDFromProgID(L"ScenarioFile.ScenarioFile",&ScenarioCLSID);
if(hResult!=S_OK)
{
MessageBox("Can't find the ScenarioFile CLSID!");
return -2;
}
hResult = CoCreateInstance(ScenarioCLSID,NULL,CLSCTX_INPROC_SERVER,IID_IUnknown,(void **)&pUnknown);
if(hResult!=S_OK)
{
MessageBox("Create object failed!");
return -2;
}
hResult = pUnknown->QueryInterface(IID_IScenarioFile,(void **)&pIScenarioFile);前面的初始化和createinstance都没有问题,但是到了执行QueryInterface()的时候,出现了连接错误
unresolved external symbol _IID_IScenarioFile在Scenario File.h文件里明明说明了这个IID的啊,而且我也include了,为什么还说没有呢
而且把IUnknow换成IDispatch也一样不行
大侠们帮帮忙吧,谢谢了

解决方案 »

  1.   

    你在scenario file.cpp中加上const IID IID_IScenarioFile;这个定义试试
      

  2.   

    IID_IScenarioFile声明了,但是没有实现。检查编译idl生成的.c文件。
      

  3.   

    编译idl的时候生成了头文件和.c文件,把.c文件也加入到你的测试工程中
      

  4.   

    aspnetwuxueyou(美丽的花瓶)  说的对,我就是
    花了半个星期的时间问了好几个问题才得出的结论请参加我的帖子
    http://community.csdn.net/Expert/topic/4211/4211710.xml?temp=.6887628