C++ 如何对结构或STL使用GetProcAdders

C++ 如何对结构或STL使用GetProcAdders,c++,struct,dll,stl,C++,Struct,Dll,Stl,我对DLL:s非常陌生,我尝试过使用带有静态链接和动态链接的DLL,但这是我第一次使用运行时链接(使用LoadLibrary来访问),现在我尝试在client.exe中使用我的全局std::vector是否可以执行GetProcAddress()要获取此STL吗?或者可以GetProcAddress存储在DLL中的某个结构吗?如果stl::vector对应用程序是全局的,您只需传递对DLL中函数的引用即可 如果stl::vector相对于DLL是全局的,那么您可以让DLL中的函数返回对它的引用。

我对DLL:s非常陌生,我尝试过使用带有静态链接和动态链接的DLL,但这是我第一次使用运行时链接(使用
LoadLibrary
来访问),现在我尝试在
client.exe中使用我的全局
std::vector
是否可以执行
GetProcAddress()
要获取此STL吗?或者可以
GetProcAddress
存储在DLL中的某个结构吗?

如果
stl::vector
对应用程序是全局的,您只需传递对DLL中函数的引用即可


如果
stl::vector
相对于DLL是全局的,那么您可以让DLL中的函数返回对它的引用。但是,如前所述,如果DLL和应用程序有可能使用不同版本的STL进行编译,则可能会出现问题,但您可能会使用过去某个时候编译的DLL。交叉C++规范最有可能成为主要关注点。如果应用程序和DLL同时编译,则无需担心。

您可以编写一个函数,返回您的
std::vector
,然后使用
GetProcAddress
导入它。不能使用外部“C”来完成吗?和访问冲突?虽然可以返回指向在DLL中构造的
std::vector
的指针,但必须确保DLL的用户使用与
std::vector
相同的定义。这并不容易(我甚至认为不可能做到安全)。您可以创建自己的类(这样您就知道定义合适了),并且一定要小心确保在DLL中创建的对象的销毁也在DLL中完成。DLL和用户可能不会使用与DLL中相同的
malloc
/
free
,因此这也很重要。正确地做到这一点真的不容易。