visual studio-VC++ COMM接口问题,本人小白一枚,临时需要COMM,所以求详细指导。

问题描述

VC++ COMM接口问题,本人小白一枚,临时需要COMM,所以求详细指导。

本人小白一个,临时需要COM接口用,网上照教程来COM接口编译报错,步骤如下
test.dll导出函数原型如下:
extern "C" __declspec(dllexport) int __stdcall cli (char*,char*);

想在VC或VS下用C++包装下这个导出函数为COM接口
目前尝试了VC 6.0环境下添加了ATL COM工程,添加了ATL简单对象并新增方法Ctest如下(通过VC向导):
STDMETHODIMP Ctest::cli(char lp_sServer, char *lp_sCmd, int *ReturnVal)
{
// TODO: Add your implementation code here
typedef int (__stdcall *Func)(char
,char*);
HMODULE hDll = LoadLibrary("test.dll");
Func test = (Func)GetProcAddress(hDll, "cli");
if( test( "test1","test2" ) != 0 )
{
return -1;
}
FreeLibrary(hDll);
return S_OK;
}

编译报错如下:
cannot instantiate abstract class due to following members:
c:program filesmicrosoft visual studiovc98atlincludeatlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator >::CreateInstance(void ,const struct _GUID &,void
*
)'
c:program filesmicrosoft visual studiovc98atlincludeatlcom.h(1827) : warning C4259: 'long __stdcall Itest::cli(unsigned char ,unsigned char *,int *)' : pure virtual function was not defined
d:dlltestcomtestcom.h(80) : see declaration of 'cli'
c:program filesmicrosoft visual studiovc98atlincludeatlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator >::CreateInstance(void *,const struct _GUID &,void
*
)'
c:program filesmicrosoft visual studiovc98atlincludeatlcom.h(1827) : error C2259: 'CComObject' : cannot instantiate abstract class due to following members:
c:program filesmicrosoft visual studiovc98atlincludeatlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator >::CreateInstance(void ,const struct _GUID &,void
*
)'
c:program filesmicrosoft visual studiovc98atlincludeatlcom.h(1827) : warning C4259: 'long __stdcall Itest::cli(unsigned char ,unsigned char *,int *)' : pure virtual function was not defined
d:dlltestcomtestcom.h(80) : see declaration of 'cli'
c:program filesmicrosoft visual studiovc98atlincludeatlcom.h(1823) : while compiling class-template member function 'long __stdcall ATL::CComCreator >::CreateInstance(void *,const struct _GUID &,void
*
)'
Error executing cl.exe.

TESTCOM.dll - 2 error(s), 2 warning(s)

解决方案

代码不完整,Func test = (Func)GetProcAddress(hDll, "cli"); 这样是调用标准dll导出函数,不是com函数。com函数要先创建对象,转换成对应的接口才行。
你还得需要一个idl文件来表述接口

一个最简单的例子:
Func test = (Func)GetProcAddress(hDll, "cli");

解决方案二:

链接没复制上
http://stackoverflow.com/questions/2187425/how-do-i-use-a-com-dll-with-loadlibrary-in-c

解决方案三:

Com接口需要通过CoCreateInstance,QueryInterface来获取接口然后调用

时间: 2025-01-27 02:57:47

visual studio-VC++ COMM接口问题,本人小白一枚,临时需要COMM,所以求详细指导。的相关文章

在powershell上运行python 键盘失灵了怎么回事?本人小白一枚,求大大们帮帮忙。

问题描述 在powershell上运行python 键盘失灵了怎么回事?本人小白一枚,求大大们帮帮忙. PS C:Usersca> python python : Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32 所在位置 行:1 字符: 1 python ~~~~~~ CategoryInfo : NotSpecified: (Python 2.7.11

printf-求大神指正 本人小白一枚``

问题描述 求大神指正 本人小白一枚`` void search(float (*pointer)[4],int n){ printf("成绩为"); float *m; m = *(pointer + n) ; for (int i = 0; i < 4; i ++){ printf("%f",(m+ i)); } } int main(int argc, const char * argv[]) { float score[][4] = {{60,70,80

如何设置代理服务器,本人小白一枚,希望大牛教一下

问题描述 看了TCP/IP协议,用Firefox设置代理后就变成连接被重置了 解决方案 解决方案二:检查一下代理服务器的地址是否正确,代理代理服务器是否需要账号和密码

vc++-本人是新手,不知如何安装microsoft visual studio 2005

问题描述 本人是新手,不知如何安装microsoft visual studio 2005 我中关村下了microsoft visual studio 2005,但格式是.ios不知如何打. 纯属新手请勿吐槽,还指望高手指点! 解决方案 ISO是镜像文件,可以用DTLite等虚拟光驱工具打开,如果你是win7以上的系统,右键,打开方式,Windows资源管理器,打开 解决方案二: 听我的 右键使用压缩文件打开 没有win rar 就装个360压缩 ios用虚拟光驱打开合情合理 但很麻烦 右键用压

从“XX\Microsoft Visual Studio 9.0\VC\bin\cl.exe”返回)

问题描述 从"XXMicrosoft Visual Studio 9.0VCincl.exe"返回) 我原来有一个项目是使用VS2005开发的,现在转换成使用vs2008,但是编译的时候一直报: 错误的结果 1 (从"C:Program FilesMicrosoft Visual Studio 9.0VCincl.exe"返回) 这个错误,别的转换项目不会报这个错误,有没有大神指导一下! 解决方案 (从"C://Program Files//Microso

java 接口怎么写,求教,本人小白啊

问题描述 java 接口怎么写,求教,本人小白啊 没写过接口,大意就是 别人用角色登录,登陆之后就可以看到列表,求教接口怎么写,写的清楚点,谢谢啦,在线等 解决方案 接口没有实现 你哟啊接口也实现不了你的功能啊 解决方案二: 接口是定义一个方法,没有具体实现:不能实现你的需求. 根据你的需求,应该是登录后调用一个方法,查询你所需的数据吧? 解决方案三: java接口是抽象方法的集合体,要用的话得用实体类实现并且重写方法才可以实现你的功能 解决方案四: 接口就是定义一个方法 ,规定了调用逻辑层 所

android studio-求大牛指导,Android Studio 怎么导入用IDEA编写的工程,本人小白,求详细步骤

问题描述 求大牛指导,Android Studio 怎么导入用IDEA编写的工程,本人小白,求详细步骤 新到一家公司,他们的项目用idea写的,用不惯,怎么导入到Android Studio啊? 话说Android Studio也用不惯... 解决方案 http://zhidao.baidu.com/link?url=6sZioutM83KY8IHyekb_8QCgCMoAPd8rIx1wC8XxZPjH8Rdju41eVKlUEXbZZ5U9zD4E793Xq8EbN4aiyNby-tJT1Q

Visual Studio 2010/2013 查看DLL接口(函数)

1. "应用程序" Visual Studio 2010/2013 的Visual Studio Tools文件夹中打开Visual Studio Command Prompt 命令提示窗口 2. dumpbin /exports c:\...\**.dll     (文件完整路径)

Visual Studio .NET使开发人员能够快速地构建和部署XML Web服务和应用程序

visual|web|web服务|xml|程序 Visual Studio .NET使开发人员能够快速地构建和部署XML Web服务和应用程序(2002.02.25)   来自:CSDN    华盛顿莱得蒙德,2002年2月8日 --四年以来,微软一直从事Microsoft .NET(公司下一代XML Web服务和应用程序的理念,它们以无缝的.安全的方式联接了整个互联网上的人.设备和信息)的基础工作.下周,微软将庆祝.NET的一个重要的里程碑--该工具将向全世界发行,通过程序员它将推动下一代的网