在C++代码中手动加载动态库示例如下:
#include <stdio.h>
#include <Windows.h>
#include <string>
#include <iostream>
using namespace std;
typedef int(*Dllfun)(int, int,char * ); //动态库的接口函数的声明,这个指针类型,要和你调用的函数类型和参数保持一致
Dllfun get_verify_func(char library_path[1024]) {
HINSTANCE hdll;
hdll = LoadLibrary(library_path);//加载.dll文件
if (hdll == NULL)
{
cout << "#######" << endl;
FreeLibrary(hdll);
}
Dllfun GetEncryptInfo = (Dllfun)GetProcAddress(hdll, "GetEncryptInfo");//GetEncryptlnfo为动态库的接口函数
if (GetEncryptInfo == NULL)
{
FreeLibrary(hdll);
}
return GetEncryptInfo;
}
int main(int argc, char* argv[])
{
Dllfun GetEncryptInfo;
GetEncryptInfo = get_verify_func("D:/java_project/VIN/VIN/test/src/com/wintone/vinjava/Lib/libmanager.dll");
int inProcId=23;
int nOption=0;
string lience_path= "D:/java_project/VIN/VIN/test/src/com/wintone/vinjava/Lib";
char exePath[2048];
int i;
for (i = 0; i<lience_path.length(); i++)
exePath[i] = lience_path[i];
exePath[i] = '\0';
int iRetCode = GetEncryptInfo(23, 0, exePath);
if (iRetCode != 0)
{
printf("\r\n fail! GetEncryptInfo return is %d\r\n", iRetCode);
}
else
{
printf("\r\n success! GetEncryptInfo return is %d;\r\n", iRetCode);
}
system("pause");
return 0;
}
动态库中的接口函数:
int GetEncryptInfo(int inProductId, int nOptions,char pManagerSrvPath[MAX_PATH])
参考文章:
https://blog.csdn.net/roshy/article/details/81944264
https://www.cnblogs.com/marblemm/p/7804056.html