描述:
我想监听某个应用程序的事件动作消息,该应用程序提供一些COM接口,所以想
写一个外部的客户程序来完成目的。
下面是我的建的VC Project中部分文件中的代码:
在stdafx.h文件中加入:
#import "*****\Workstation.exe" no_namespace
Com_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。
您可能想查找下面的文章:
- 我的ActiveX嵌在一个网页中,如何在ActiveX中点击一个按扭,关闭它的宿主网页?在线等急!急!急!
- 宿主有什么办法可以判断插件是否Query了某个接口?
- 如何释放加载到宿主程序中的dll
- 开发一个中插入word文档的ActiveX有个数据持续化的问题,就是想把ActiveX的某个变量保存下次打开WORD时用这变量存到宿主word文档中
- dll如何调用,宿主程序的控件?高手急救!!
- ATL做的DLL文件如何在宿主程序中使用MFC类和函数?
- 如何得到宿主进程的窗口句柄?
- 求救:如下程序放在DLL中进行注入正常,侦听也正常,但被注入后宿主不失去反应,不能telnet
- 请问一个CreateRemoteThread的问题创建远程线程的时候,远程的宿主进程会出现错误高手们帮助一下
- 注入的DLL如何调用宿主函数?