我想监听某个应用程序的事件动作消息,该应用程序提供一些COM接口,所以想
写一个外部的客户程序来完成目的。下面是我的建的VC Project中部分文件中的代码:在stdafx.h文件中加入:
#import "*****\Workstation.exe" no_namespaceCom_Test.cpp中如下:
#include "stdafx.h"
#include "windows.h"
#include "tchar.h"
#include "atlbase.h"
#include <iostream>#using <mscorlib.dll>
//"bd430d64-dddd-11d2-968f-00104bb62cbf"
DEFINE_GUID(CLSID_DataSelector,
0xbd430d64,0xdddd,0x11d2,0x96,0x8f,0x0,0x10,0x4b,
0xb6,0x2c,0xbf);
//"bd430d63-dddd-11d2-968f-00104bb62cbf"
DEFINE_GUID(IID_IDataSelector,
0xbd430d63,0xdddd,0x11d2,0x96,0x8f,0x0,0x10,0x4b,
0xb6,0x2c,0xbf);
using namespace System;int _tmain()
{
using namespace::std;    // TODO: Please replace the sample code below with your own.
std::cout<<"Initializing"<<endl;
if ( FAILED(CoInitialize(NULL)) )
{
cout<<"Failed!"<<endl;
return -1;
}        
std::cout<<"Succeed!"<<endl; IDataSelector* pDS = NULL;
HRESULT hr;
hr = ::CoCreateInstance(CLSID_DataSelector,       NULL,                CLSCTX_INPROC_SERVER,       IID_IDataSelector,
      (void**) &pDS ); if ( FAILED(hr) )
{
std::cout<<"Failed!"<<endl;
}
std::cout<<"Succeed!"<<endl; return 0;
}遇到的问题为:
LINK : error LNK2020: unresolved token (0A00001B) CLSID_DataSelector
LINK : error LNK2020: unresolved token (0A00001C) IID_IDataSelector上面的DEFINE_GUID宏中的uuid值,我是从import的tlh中查到,自己定义的。
因为如果不定义的话,就会出现未定义CLSID_DataSelector,IID_IDataSelector的错误。希望高手能指点一下!我是新手,还请多多指教。

解决方案 »

  1.   

    #import "*****\Workstation.exe" no_namespace 一般应该是载入类型库文件的,然后需要先编译这个头文件,还有下面应该使用智能指针包装类,也即IDataSelectorPtr来使用接口,并且使用CreateInstance。
      

  2.   

    多谢指点,可惜又引出几个问题。
    1.类型库文件是哪种后缀的文件?是后缀为tlh/tli的文件吗?
    2.我不太懂如何使用智能指针,能否给出一小段示例?CoCreateInstance不是包含了三个步骤的吗,为什么要单用CreateInstance函数?多谢多谢!