我想要的很简单 - 让C ++应用程序使用静态运行时(/MT
,/MTd
标志进行编译)并能够打开,调用等类和来自DLL的函数(使用 LoadLibrary ,C ++)。这样的事情可能吗?
答案 0 :(得分:1)
这不是不可能的。但是让它成为通用的,并且可靠是一个非常长距离拍摄。 C ++中没有标准化的元数据格式,可以让您知道传递的是正确的参数。即使是导出的类或函数的名称也不容易猜到,它是一个编译器实现细节。
COM Automation将是解决这些问题的一个例子。由ActiveX测试容器覆盖。或Java或.Net托管语言等语言的反射支持。不是C ++。
答案 1 :(得分:1)
我认为你在混淆。仅仅因为它被称为“静态”运行时,它只意味着标准C和C ++库的代码静态链接到您的应用程序中。一般来说,这绝不会对您的应用程序可以做什么施加任何限制。
所有标准库类(如ifstream
)和printf
等函数都可以使用,无论它们的代码是在静态运行时的EXE中,还是在动态运行时的EXE之外。所有Win32函数(如LoadLibrary
和GetProcAddress
)在常规Windows DLL(如Kernel32.dll
)中始终位于应用程序之外,因此它们肯定不受运行时选择的影响。
我会说你真正的问题是尝试使用GetProcAddress
调用C ++方法。 Win32 API仅用于动态调用C函数。您将遇到的第一个问题是,由于C++'s name mangling,您将无法找到方法的名称。您可能在分配对象时遇到问题。我的直觉告诉我,几乎不可能正常工作。
以下是三个建议的替代方案,而不是使用GetProcAddress
直接调用C ++方法: