我们可以使用“LoadLibrary”让我们的应用程序用Visual Studio 2010和静态运行时编译吗?

Can we use `LoadLibrary ` having our application compiled with Visual Studio 2010 and static runtime?

本文关键字:我们 2010 静态 编译 Studio 运行时 应用程序 可以使 LoadLibrary Visual      更新时间:2023-10-16

我想要的很简单-有c++应用程序,将与静态运行时 (/MT, /MTd标志)编译,并能够打开,调用等和dll函数(使用LoadLibrary, c++)。这种事可能吗?

这不是不可能的。但要使其通用且可靠是一个非常遥远的目标。c++中没有标准化的元数据格式来让您知道正在传递正确的参数。甚至导出的类或函数的名称也不容易猜测,它是编译器实现的细节。

COM自动化就是解决这些问题的一个例子。由ActiveX测试容器覆盖。或者Java或。net托管语言中的反射支持。而不是c++。

我想你把事情搞混了。只是因为它被称为"静态"运行时,它只是意味着标准C和c++库的代码被静态地链接到您的应用程序中。一般来说,这不会对应用程序的功能造成任何限制。

所有的标准库类,如ifstream和函数,如printf将是可用的,无论他们的代码是在静态运行时的EXE内部,还是在动态运行时的EXE外部。所有的Win32函数,如LoadLibraryGetProcAddress,总是在你的应用程序之外的常规Windows dll(如Kernel32.dll)中,所以它们当然不会受到你的运行时选择的影响。

我想说你真正的问题是试图使用GetProcAddress调用c++方法。Win32 API仅用于动态调用C函数。您将遇到的第一个问题是,由于c++的名称混淆,您将无法找到方法的名称。您还可能在分配对象时遇到问题。我的直觉告诉我,要使它正常工作几乎是不可能的。

这里有三个建议的替代方案,可以使用GetProcAddress代替直接调用c++方法:

    将c++方法封装在C函数中。
  1. 使用c++框架,如COM或Qt插件来设置动态DLL接口。
  2. 使用不同的平台,如。net或Java;完全支持面向对象反射和动态调用。
相关文章: