函数指针分配在创建 DLL 后导致错误
Function pointer assignment cause error after creating DLL
我为我的应用程序编写了一个类。 在此类中,有用于通过网络套接字进行通信的静态函数指针。 在启动时,我将这个函数指针分配给类外的函数,并且可以正常工作,没有任何问题。 现在我从我的类创建了 DLL,但是当我将此指针分配给我的函数时,我收到"未解析的外部符号"错误。 我如何在没有任何问题的情况下将类内的静态函数指针分配给类外的函数?
这是我的班级:
(标题,"MyClass.h"(
#define IMPORT_DLL
#ifdef IMPORT_DLL
#define DLL_IMPORT_EXPORT __declspec(dllimport)
#else
#define DLL_IMPORT_EXPORT __declspec(dllexport)
#endif
namespace nmspace
{
class MyClass
{
//Constructors
DLL_IMPORT_EXPORT MyClass();
DLL_IMPORT_EXPORT MyClass(size_t ID);
//Destructor
DLL_IMPORT_EXPORT ~MyClass();
....
//This static function pointer should be assigned to a function outside of class
//this pointer used frequently
static bool(*Class_Transmit)(uint8_t* TX_buffer, size_t TX_size, size_t Port);
}
}
(来源,"我的班级.cpp"(
#include "MyClass.h"
bool(*MyClass::Class_Transmit)(uint8_t* TX_buffer, size_t TX_size, size_t Port) = nullptr;
//Constructor
void MyClass::MyClass()
{
size_t Sock_num = 0
uint8_t TX_buffer[20] = "Transmit done";
bool is_connected = false;
is_connected = Class_Transmit(TX_buffer, 20, Sock_num);
}
(主要,"主要.cpp"(
#include "MyClass.h"
bool MyFunc(uint8_t* TX_buffer, size_t TX_size, size_t Port)
{
....
return true;
}
int main()
{
HINSTANCE hinstLib;
hinstLib = LoadLibrary(TEXT("myclass.dll"));
// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
return false;
//Assign network socket function for "Class_Transmit" class for communication
MyClass::Class_Transmit = MyFunc;
return 0;
}
Error LNK2001 unresolved external symbol "public: static bool (__cdecl*
nmspace::MyClass::Class_Transmit)(unsigned char *,unsigned int,unsigned int)"
(?Class_Transmit@MyClass@nmspace@@2P6A_NPAEII@ZA)
该错误指示函数需要位于nmspace
命名空间中。 请尝试以下操作:
namespace nmspace
{
bool MyFunc(uint8_t* TX_buffer, size_t TX_size, size_t Port)
{
return true;
}
}
完成此操作后,您需要清理其余声明。 以下完整程序编译和链接没有问题:
#include <cstdint>
#include <cstdlib>
namespace nmspace
{
class MyClass
{
public:
static bool (*Class_Transmit)(uint8_t* TX_buffer, size_t TX_size, size_t Port);
};
}
bool (*nmspace::MyClass::Class_Transmit)(uint8_t* TX_buffer, size_t TX_size, size_t Port) = nullptr;
namespace nmspace
{
bool MyFunc(uint8_t* TX_buffer, size_t TX_size, size_t Port)
{
return true;
}
}
int main()
{
nmspace::MyClass::Class_Transmit = nmspace::MyFunc;
return 0;
}
相关文章:
- 错误:当我从"WinDbg"打开可执行文件时,找不到符号文件。默认导出 ntdll 的符号.dll
- 发生此错误:在0x0F2BFB7C(基于.dll)时引发异常 尝试更改大小是问题吗?
- 在Embarcadero C++ Builder中生成的DLL未解决的外部链接错误
- 系统错误:程序无法启动,因为您的计算机中缺少MSVCP140D.DLL。尝试重新安装该程序以解决此问题
- 链接库错误 c/缺少 dll/错误版本?
- 函数指针分配在创建 DLL 后导致错误
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- Dll中缺少什么(致命错误LNK1107:无效或损坏的文件:)
- C++ DLL 运行时错误"abc.dll is not a valid WIN32 application" 。请帮助解决这个问题
- 如何解决导入dll过程中Viual Studio中的并排配置错误
- DLL 注入不断失败,出现不一致的错误
- 如何处理错误"E1696命令行错误:无法在Visual Studio 2017中打开元数据文件"mscorlib.dll"?
- C ++ DLL导入:函数调用返回错误的结果
- JNI 不满意链接错误: 动态链接库 (DLL) 初始化例程失败
- 外部 "C" Visual Studio 2015 中的显式类型错误,DLL 测试代码
- dll 生成成功,但在加载 dll 时执行错误
- 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误
- msftedit "Access violation reading location 0x00000008"错误.dll SetWindowSub类中的RichEdit控件
- 链接器错误:DLL和继承
- Qt 可执行错误 - dll 库