Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++中使用带有DLoad RealSub()方法的库DLL_C++_Winapi - Fatal编程技术网

在C++中使用带有DLoad RealSub()方法的库DLL

在C++中使用带有DLoad RealSub()方法的库DLL,c++,winapi,C++,Winapi,我可以使用LoadLibrary方法导入struct类型的数据吗?? 请原谅我的英语。 谢谢。嗯。。。恐怕那个问题有点难理解 在C++中,结构声明就是声明。它不会生成您可以在运行时加载的内容,它是一个纯编译时结构,只告诉编译器内存中的内容布局、涉及的字段、它们的类型和顺序等等。。。恐怕那个问题有点难理解 在C++中,结构声明就是声明。它不会生成您可以在运行时加载的内容,它是一个纯编译时结构,只告诉编译器内存中的内容布局、涉及的字段、它们的类型和顺序等等。我假设您使用的是VC++2005 MS现在

我可以使用LoadLibrary方法导入struct类型的数据吗?? 请原谅我的英语。
谢谢。

嗯。。。恐怕那个问题有点难理解


<>在C++中,结构声明就是声明。它不会生成您可以在运行时加载的内容,它是一个纯编译时结构,只告诉编译器内存中的内容布局、涉及的字段、它们的类型和顺序等等。。。恐怕那个问题有点难理解


<>在C++中,结构声明就是声明。它不会生成您可以在运行时加载的内容,它是一个纯编译时结构,只告诉编译器内存中的内容布局、涉及的字段、它们的类型和顺序等等。

我假设您使用的是VC++2005

MS现在提供给您

Visual C++链接器支持DLL的延迟加载。这使您无需使用Windows SDK函数LoadLibrary和GetProcAddress来实现DLL延迟加载

设置延迟负载所需遵循的步骤


转到Project->Properties->Linker->Input,然后在“延迟加载的Dll”中指定Dll

我假设您使用的是VC++2005

MS现在提供给您

Visual C++链接器支持DLL的延迟加载。这使您无需使用Windows SDK函数LoadLibrary和GetProcAddress来实现DLL延迟加载

设置延迟负载所需遵循的步骤


转到Project->Properties->Linker->Input,然后在“延迟加载的Dll”中指定Dll

您的意思是将数据放入Dll,并使用LoadLibrary和Getprocaddres获取指向数据的指针吗?这是可能的,尽管更常见的做法是将函数放在dll中,并让它们返回指向数据的指针。

您的意思是将数据放在dll中,并使用LoadLibrary和Getprocaddres获取指向数据的指针吗?这是可能的,尽管更常见的做法是将函数放在dll中,并让它们返回指向数据的指针。

让我假设问题中遗漏了一些内容:

您有一个名为flubber.dll的动态库 库导出函数bool GetFlubberFlubber*flubber。 函数和类型Flubber正好是一个struct!在名为flubber.h的头文件中声明。
如果这3个条件都满足,那么您可以在flubber.dll上使用LoadLibrary,然后使用GetProcAddress,GetFlubber作为proc名称,最后您可以在本地声明一个flubber实例,并通过检索到的proc地址将其传递给GetFlubber。

让我假设问题中遗漏了一些内容:

您有一个名为flubber.dll的动态库 库导出函数bool GetFlubberFlubber*flubber。 函数和类型Flubber正好是一个struct!在名为flubber.h的头文件中声明。
如果这三个条件都满足,那么您可以在flubber.dll上使用LoadLibrary,然后使用GetProcAddress,GetFlubber作为proc名称,最后您可以在本地声明一个flubber实例,并通过检索到的proc地址将其传递给GetFlubber。

因为其他响应表明,很难判断这里询问了什么,但我会对这个问题的另一种解释做出回应。我不确定它是否得到官方支持,但您可以让DLL导出一个全局变量,然后通过GetProcAddress动态访问它

例如,如果名为foo.dll的库包含名为g_MyGlobal的foo类型的全局变量,则它可以在foo.def中导出该变量。然后,客户端代码可以调用:

MyPointer = GetProcAddress(..., "g_MyGlobal");
并获取指向全局的FOO*指针


…但是,尽管如此,如果您发现自己需要出于私人测试目的以外的其他目的进行此操作,您可能需要重新思考您的设计。将这个全局函数隐藏在DLL中导出的函数后面可能会更安全、更干净。

因为其他回答表明,很难说出这里要问什么,但我将给出一个回答,以获得对这个问题的另一种解释。我不确定它是否得到官方支持,但您可以让DLL导出一个全局变量,然后通过GetProcAddress动态访问它

例如,如果名为foo.dll的库包含名为g_MyGlobal的foo类型的全局变量,则它可以在foo.def中导出该变量。然后,客户端代码可以调用:

MyPointer = GetProcAddress(..., "g_MyGlobal");
并获取指向全局的FOO*指针


…但是,尽管如此,如果您发现自己需要出于私人测试目的以外的其他目的进行此操作,您可能需要重新思考您的设计。将此全局函数隐藏在DLL中导出的函数后面可能会更安全、更干净。

如果他想根据版本控制和可用性动态加载库,则必须仍然使用LoadLibrary。如果他想根据版本动态加载库 加载和可用性,则必须仍然使用LoadLibrary。