读书人

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

发布时间: 2012-09-07 10:38:15 作者: rapoo

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文件如下:

C/C++ code
#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);}

编译的时候,一堆的错。我就纠结了,求指导,我操作是否有错,需要怎么修改。

[解决办法]
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 = ::LoadLibrary("zkemsdk.dll");//加载dll   Func Connect_Net = GetProcAddress(Hint, "Connect_Net");   cout << Connect_Net(x,y);   FreeLibrary(Hint);}
[解决办法]
VARIANT_BOOL和BSTR在com里面用过,应该是“标准”(我也不知道怎么称呼)类型,在各种语言都通用,用的时候要包含其头文件
C/C++ code
#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);
}
[解决办法]
探讨

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

读书人网 >C++

热点推荐