我们可以使用'LoadLibrary'使用Visual Studio 2010和静态运行时编译应用程序吗? 我想要的是简单的C++程序,它可以用静态运行时< /St>( /Mt >代码> /MTD < /Calp>标志),并能够打开、调用等类< /强>和DLL的THARE函数(使用 LoadLibrary C++)。这样的事情可能吗?这不是不可能的。但要使其具有普遍性和可靠性,这是一个很长的路要走。C++中没有标准化的元数据格式,这可以让您知道您正在传递正确的参数。即使导出的类或函数的名称也不容易猜测,这是一个编译器实现细节

我们可以使用'LoadLibrary'使用Visual Studio 2010和静态运行时编译应用程序吗? 我想要的是简单的C++程序,它可以用静态运行时< /St>( /Mt >代码> /MTD < /Calp>标志),并能够打开、调用等类< /强>和DLL的THARE函数(使用 LoadLibrary C++)。这样的事情可能吗?这不是不可能的。但要使其具有普遍性和可靠性,这是一个很长的路要走。C++中没有标准化的元数据格式,这可以让您知道您正在传递正确的参数。即使导出的类或函数的名称也不容易猜测,这是一个编译器实现细节,c++,visual-studio,visual-studio-2010,static,runtime,C++,Visual Studio,Visual Studio 2010,Static,Runtime,COM自动化就是解决这些问题的一个例子。包含在ActiveX测试容器中。或者Java或.Net托管语言中的反射支持。不C++。< / P> < P>我想你把事情搞得一团糟。仅仅因为它被称为“静态”运行时,它只是意味着标准C和C++库的代码被静态链接到应用程序中。通常,这不会对应用程序的功能造成任何限制 所有标准库类(如ifstream)和函数(如printf)都将可用,无论它们的代码是在静态运行时的EXE内部还是在动态运行时的EXE外部。所有Win32函数,如LoadLibrary和GetPro

COM自动化就是解决这些问题的一个例子。包含在ActiveX测试容器中。或者Java或.Net托管语言中的反射支持。不C++。< / P> < P>我想你把事情搞得一团糟。仅仅因为它被称为“静态”运行时,它只是意味着标准C和C++库的代码被静态链接到应用程序中。通常,这不会对应用程序的功能造成任何限制

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

<>我想说,你真正的问题是尝试调用C++方法。Win32 API仅用于动态调用C函数。您将遇到的第一个问题是,由于存在错误,您将无法找到方法的名称。分配对象时可能也会遇到问题。我的直觉告诉我,要正常工作几乎是不可能的

这里有三个建议的替代方案,用C++来调用C++方法:<代码> GePosiTrave>代码>:

在C函数中包装C++方法。
  • 使用C++框架,如COM或动态DLL接口。
  • 使用不同的平台,如.NET或Java;它完全支持面向对象的反射和动态调用