![](/img/trans.png)
[英]Calling WinSock functions using LoadLibrary and GetProcAddress
[英]Calling functions from a DLL using LoadLibrary() and GetProcAddress
我对 C++ 和视觉工作室很陌生,我一直在努力解决这个问题。 我有 2 个已成功加载的 DLL 文件。我没有任何一个 DLL 文件的头文件或 .lib 文件,因为我只获得了 .dll 文件。 我想使用Arti
DLL 中的EstablishConnection()
函数。 但是,每当我在构建代码后执行代码时,我总是得到相同的结果,这是我的错误检查告诉我无法找到该函数。 任何关于我做错了什么的建议将不胜感激。
这是我写的 main.cpp:
#include "windows.h"
#include <iostream>
#include "libloaderapi.h"
typedef CHAR(WINAPI* EstablishConnection) (std::string serverIP, int serverPort);
int main()
{
BOOL freeResult, runTimeLinkSuccess = FALSE;
//HINSTANCE Arti = NULL;
EstablishConnection EstablishConnectionptr = NULL;
// Loading the DLL files using LoadLibrary ---------------------------------------------------------------------------------
HINSTANCE Arti = LoadLibraryA("C:\\Users\\CCRT\\source\\repos\\Connection\\Connection\\Articares.Core.dll");
HINSTANCE Log = LoadLibraryA("C:\\Users\\CCRT\\source\\repos\\Connection\\Connection\\NLog.dll");
// DLL LOAD CHECK ---------------------------------------------------------------------------------------------------------
if (Arti == NULL) {
std::cout << "Arti load error\n";
return 0;
}
if (Log == NULL) {
std::cout << "Log load error\n";
return 0;
}
// Pointers to Functions in DLL ---------------------------------------------------------------------------------------------
EstablishConnectionptr = (EstablishConnection)GetProcAddress(Arti, "EstablishConnection");
// Initialise Functions --------------------------------------------------------------------------------------------------
if (runTimeLinkSuccess = (NULL != EstablishConnectionptr))
{
CHAR retVal = EstablishConnectionptr("192.168.102.1", 3000);
}
//Free the DLLs -------------------------------------------------------------------------------------------------------------
FreeLibrary(Arti);
FreeLibrary(Log);
//If unable to call the DLL function, use an alternative.
if (!runTimeLinkSuccess)
printf("Unable to use function so use alternative method\n");
}
这是 DLL 中的EstablishConnection()
:
public bool EstablishConnection(string serverIP, int serverPort)
您需要创建相同的.NET Framework version
C++/CLR。
例如
C# DLL:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ClassLibrary2
{
public class Class1
{
public void myfunction()
{
Console.WriteLine("hello");
}
}
}
创建 C++/CLR 控制台应用程序(.NET Framework)
浏览并添加 DLL 参考:
C++
#include "pch.h"
using namespace System;
using namespace ClassLibrary2;
int main(array<System::String ^> ^args)
{
Class1 c1;
c1.myfunction();
return 0;
}
输出:你好
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.