【发布时间】:2014-08-14 02:25:18
【问题描述】:
最近,我开始对从非托管 DLL 文件中导入特定函数感兴趣。似乎大多数语言都有执行此操作的特定结构。例如,在 C++ 中,要从 DLL 中导入特定函数,您可以这样做(取自 http://msdn.microsoft.com/en-us/library/aa984739(v=vs.71).aspx):
#using <mscorlib.dll>
using namespace System::Runtime::InteropServices;
// for DllImportAttribute
namespace SysWin32
{
[DllImport("user32.dll", EntryPoint = "MessageBox", CharSet = Unicode)]
int MessageBox(void* hWnd, wchar_t* lpText, wchar_t* lpCaption,
unsigned int uType);
}
int main( )
{
SysWin32::MessageBox( 0, L"Hello world!", L"Greetings", 0 );
}
或者,例如,在平面汇编程序中,MessageBoxW 的相同导入可以这样完成:
data import
library user32,'user32.dll'
import user32,MessageBox,'MessageBoxW'
end data
但是,我发现的唯一可能在纯 C 中使用的方法如下所述:http://support.microsoft.com/kb/131313 这涉及从创建 .lib(静态库)的对象创建对象,然后链接它们,听起来只是导入一个函数需要做很多工作。是否有一些我可以使用的捷径,还是我必须坚持制作和使用静态库?
【问题讨论】:
-
注意:给定的 C++ sn-p 实际上是 VC++,因为它使用了非标准扩展。
标签: c dll static-libraries