dll调用dll的问题,求高手,整了N天了。
我手上有一个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);}#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);}
[解决办法]
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);}
[解决办法]
#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);
}
[解决办法]