123
123

Reputation: 5824

Link imports by name (C++/Visual Studio)

I have a few NT imports I want to use in my program, problem is I am unable to use them without going though the lengthly process of downloading and setting up the WDK to use just two functions. I would also prefer not to use GetModuleHandle and GetProcAddress.

I know in VB6 you can manually define imported functions from dlls like this:

Private Declare Function NtFunction Lib "ntdll.dll" (function arguments) As type

Is there something similar I can do with C++ in Visual Studio without having all the headers/libs?

Upvotes: 0

Views: 208

Answers (1)

Ben Voigt
Ben Voigt

Reputation: 283634

You say you don't want to use GetProcAddress, but that's exactly what VB6 Declare Function (and .NET p/invoke) does.

You do need a complete prototype, often you can recreate enough of the header file from documentation.

The import library is a little more difficult, but there are tools to create import libraries from the .DLL.

If you create a .DEF file, you can use the LIB.EXE tool that comes with Visual C++ (and also available as a free download as part of the Windows SDK), see Building an Import Library

Here is some more information.

mingw comes with a tool for mostly automating creation of the .DEF file: http://www.mingw.org/wiki/CreateImportLibraries (the import library it creates is only usable with gcc, but the .DEF file is useful for making a VC++ import library as described above).

Here's a another tool that might help: http://www.codeproject.com/KB/tips/ImpDef.aspx

Upvotes: 4

Related Questions