dll调用dll的问题,求高手,整了N天了。

lxpandsq 2012-08-16 04:29:45
我手上有一个zkemsdk.dll文件及其api描述如下:
Connect_Net
【函数定义】
VARIANT_BOOL Connect_Net( [in] BSTR IPAdd, [in] long Portl)
【功能】
通过IP地址连接机器,和机器建立一个网络连接
【参数】
IPAdd:
机器的IP地址。
Port:
连接机器时使用的端口号,默认为4370.
【返回值】
连接成功返回True,否则返回False
我先需要自己写一个c++写dll调用这个方法,打印出这个方法的结果,因为我是学java的,求代码及相关操作:
我的环境,vc++6.0
进行的操作如下:
1.新建一个win32 Dynamic-Link Librabry-工程名称test-下一步-一个简单的dll工程
2.修改test.cpp文件如下:

#include<iostream.h>
#include<Windows.h>

class getNumber( )
{
String x="192.168.0.1";
String y="4370";
HINSTANCE Hint = ::LoadLibrary("zkemsdk.dll");//加载dll
cout << Connect_Net(x,y);
FreeLibrary(Hint);
}


编译的时候,一堆的错。我就纠结了,求指导,我操作是否有错,需要怎么修改。
...全文
752 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dty_祥子 2015-04-26
  • 打赏
  • 举报
回复
解决了吗?我这碰到这个问题了!!!
游戏娃娃 2013-05-24
  • 打赏
  • 举报
回复
引用 17 楼 xmnathan 的回复:
#include<iostream.h> #include<Windows.h> static VARIANT_BOOL (*fpConnect)( BSTR, long )=NULL; void getNumber( ) { String x="192.168.0.1"; String y="4370"; HINSTANCE Hint = ::LoadLibrary("zkemsdk.dll");//加载dll fpConnect = (Func)GetProcAddress(Hint, "Connect_Net");//获取要调用的函数指针 cout << fpConnect(x,y); FreeLibrary(Hint); }
编译后提示如下错误: : error C2440: 'initializing' : cannot convert from 'char [14]' to 'unsigned short *' Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast 执行 cl.exe 时出错. 安全接送.exe - 1 error(s), 0 warning(s)
madisonj 2012-09-05
  • 打赏
  • 举报
回复
如果要调用类里面的成员方法呢??
一叶之舟 2012-08-17
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<Windows.h>
typedef VARIANT_BOOL (*Func)( BSTR, long );
void getNumber( )
{
String x="192.168.0.1";
String y="4370";
HINSTANCE Hint = ::LoadLibrary("zkemsdk.dll");//加载dll
Func Connect_Net = GetProcAddress(Hint, "Connect_Net");
cout << Connect_Net(x,y);
FreeLibrary(Hint);
}
  • 打赏
  • 举报
回复
#include<iostream.h>
#include<Windows.h>
static VARIANT_BOOL (*fpConnect)( BSTR, long )=NULL;
void getNumber( )
{
String x="192.168.0.1";
String y="4370";
HINSTANCE Hint = ::LoadLibrary("zkemsdk.dll");//加载dll
fpConnect = (Func)GetProcAddress(Hint, "Connect_Net");//获取要调用的函数指针
cout << fpConnect(x,y);
FreeLibrary(Hint);
}
翅膀又硬了 2012-08-17
  • 打赏
  • 举报
回复
VARIANT_BOOL和BSTR在com里面用过,应该是“标准”(我也不知道怎么称呼)类型,在各种语言都通用,用的时候要包含其头文件

#include<iostream.h>
#include<Windows.h>
#include <wtypes.h>

typedef VARIANT_BOOL (*Func)( BSTR, long );
void getNumber( )
{
BSTR x=_T("192.168.0.1");
long y= 4370;
HINSTANCE Hint = ::LoadLibrary(_T("zkemsdk.dll"));//加载dll
Func Connect_Net = (Func)GetProcAddress((HMODULE)Hint, "Connect_Net");
cout << Connect_Net(x,y);
FreeLibrary(Hint);
}
lxpandsq 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]


#import 指令 (c++)主要描述 COM 接口


你说得应该是__declspec(dllimport)
[/Quote]
不错,但是上面那个报错怎么解决啊,用了这个以后,还是报错#define VARIANT_BOOL BOOL

E:\vc项目\mydll\mydll.cpp(16) : error C2065: 'BSTR' : undeclared identifier
E:\vc项目\mydll\mydll.cpp(16) : error C2062: type 'long' unexpected
RLib 2012-08-17
  • 打赏
  • 举报
回复
#define VARIANT_BOOL BOOL
RLib 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 5 楼 的回复:

引用 1 楼 的回复:
是不是要用个导入语句 什么import
忘了


哥那java吧,好像

dll导入有滴哥们
[/Quote]

#import 指令 (c++)主要描述 COM 接口


你说得应该是__declspec(dllimport)
lxpandsq 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
dll调用跟普通调用应该一样的。你写那个连函数都没倒出就用,肯定不行。2楼写的就对吧。如果还不行,最好把错误贴出来
[/Quote]

用了二楼的代码,对这句话报错typedef VARIANT_BOOL (*Func)( BSTR, long );

--------------------Configuration: mytestdll - Win32 Debug--------------------
Compiling...
mytestdll.cpp
E:\vc项目\mytestdll\mytestdll.cpp(12) : error C2065: 'Func' : undeclared identifier
E:\vc项目\mytestdll\mytestdll.cpp(12) : error C2100: illegal indirection
E:\vc项目\mytestdll\mytestdll.cpp(12) : error C2501: 'VARIANT_BOOL' : missing storage-class or type specifiers
E:\vc项目\mytestdll\mytestdll.cpp(12) : error C2143: syntax error : missing ';' before '('
E:\vc项目\mytestdll\mytestdll.cpp(12) : error C2143: syntax error : missing ')' before ','
E:\vc项目\mytestdll\mytestdll.cpp(12) : error C2501: 'BSTR' : missing storage-class or type specifiers
E:\vc项目\mytestdll\mytestdll.cpp(12) : warning C4518: 'long ' : storage-class or type specifier(s) unexpected here; ignored
E:\vc项目\mytestdll\mytestdll.cpp(12) : error C2059: syntax error : ')'
翅膀又硬了 2012-08-17
  • 打赏
  • 举报
回复
dll调用跟普通调用应该一样的。你写那个连函数都没倒出就用,肯定不行。2楼写的就对吧。如果还不行,最好把错误贴出来
lxpandsq 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
C/C++ code



#include<iostream.h>
#include<Windows.h>
typedef VARIANT_BOOL (*Func)( BSTR, long );
void getNumber( )
{
String x="192.168.0.1";
String y="4370";
HINSTANCE Hint = ::……
[/Quote]

我感觉还是这代码靠谱,我正在测试。
lxpandsq 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 1 楼 的回复:
是不是要用个导入语句 什么import
忘了

C++里面引入一个DLL
#pragma comment(lib,"XXX.lib");//比如引入XXX.DLL
[/Quote]

好像可以通过平台进行导入,因为实际上现在没有lib文件,只有dll文件啊?
maoloverme1 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 的回复:]
引用 20 楼 的回复:

那种接口定义是com类型的dll,需要import+CreateInstance加载而不是loadlibrary

当然还要注册
[/Quote]
++
Saingel 2012-08-17
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 的回复:]

那种接口定义是com类型的dll,需要import+CreateInstance加载而不是loadlibrary
[/Quote]
当然还要注册
Saingel 2012-08-17
  • 打赏
  • 举报
回复
那种接口定义是com类型的dll,需要import+CreateInstance加载而不是loadlibrary
RLib 2012-08-17
  • 打赏
  • 举报
回复
就是符号未定义。
nightkids_008 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 1 楼 的回复:
是不是要用个导入语句 什么import
忘了


哥那java吧,好像
[/Quote]
dll导入有滴哥们
竞天问 2012-08-16
  • 打赏
  • 举报
回复
Func Connect_Net = (Func)GetProcAddress(Hint, "Connect_Net");

写错一句
Gloveing 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
是不是要用个导入语句 什么import
忘了
[/Quote]
C++里面引入一个DLL
#pragma comment(lib,"XXX.lib");//比如引入XXX.DLL
加载更多回复(5)

64,701

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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