ヘルプ、してください。 Aにはdllファイルがあります。私はそれが関数とパラメータであることを知っています。 EclipseでMinGWを使うにはどうすればいいですか?C++でヘッダーなしのDLLを使用する方法
答えて
私はあなたがウィンドウを使用していると仮定しています。 WINAPIには、LoadLibraryとGetProcAddressの機能があります。ここにはexampleの使用方法があります
静的ライブラリの場合のように、dllへのパスをコンパイラプロパティや他の場所に追加することはできません。 – Country
@Country:おそらくhttp://www.mingw.org/wiki/CreateImportLibrariesは – user786653
を助けます@Country静的ライブラリは何を呼び出すべきかを知るためにヘッダを必要とします。 – Deanna
私はwrapperを作成しました。
適切な.LIBファイルがあり、関数プロトタイプが正確であれば、ヘッダーは必要ありません。関数を自分で宣言するだけで(おそらく独自のカスタムヘッダーに)。これらの関数を直接呼び出します。 .LIBファイルとリンクします。 DLLはOSによってロードされ、関数が呼び出されます。
DLLにリンクする.LIBファイルがない場合は、LoadLibrary
とGetProcAddress
を使用する必要があります。
私はあなたがDLL関数の署名を知っていることを理解しており、ヘッダーはありません。知られている署名と与えられた関数dll_function
については
:
long dll_function(long, long, char*, char*);
次のC++のコードでexamplifiedのようにあなたは、WindowsのAPIからLoadLibrary
とGetProcAddress
を使用することができます。
#include <windows.h>
#include <iostream>
typedef long(__stdcall *f_funci)(long, long, char*, char*);
struct dll_func_args {
long arg1;
long arg2;
std::string arg3;
std::string arg4;
};
// Borrowing from https://stackoverflow.com/a/27296/832621
std::wstring s2ws(const std::string& s)
{
int len;
int slength = (int)s.length() + 1;
len = MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, 0, 0);
wchar_t* buf = new wchar_t[len];
MultiByteToWideChar(CP_ACP, 0, s.c_str(), slength, buf, len);
std::wstring r(buf);
delete[] buf;
return r;
}
int main()
{
std::string filename = "C:\\...\\mydllfile.dll";
dll_func_args args;
args.arg1 = 1;
args.arg2 = 2;
args.arg3 = "arg3";
args.arg4 = "arg4";
std::wstring tmp = s2ws(filename);
HINSTANCE hGetProcIDDLL = LoadLibrary(tmp.c_str());
if (!hGetProcIDDLL)
{
std::cerr << "Failed to load DLL" << std::endl;
return EXIT_FAILURE;
}
// resolve function address here
dll_func_ptr func = (dll_func_ptr)GetProcAddress(hGetProcIDDLL, "dll_function");
if (!func)
{
std::cout << "Failed to load function inside DLL" << std::endl;
return EXIT_FAILURE;
}
std::cout << "Return value " << func(args.arg1, args.arg2, (char *)args.arg3.c_str(), (char *)args.arg4.c_str()) << std::endl;
return EXIT_SUCCESS;
}
- 1. C++での.hヘッダー付きDLLの使用
- 2. IronPythonでC#dllを使用する方法
- 3. DLLなしでlibcURLを使用する適切な方法は何ですか?
- 4. C++ .exeでDLLをコンパイルする方法
- 5. DLLのみを使用してアプリケーションを実行する方法は? C#。
- 6. Visual Studio C++でDLLを使用する
- 7. C#でネイティブDLLを使用する
- 8. Qt C++でDLLを使用する
- 9. Winformアプリケーションでdllを使用するC#
- 10. C#でvC++ Dllを使用する
- 11. COM dllをアンマネージC++で使用する
- 12. C#のC++ヘッダーでdllを呼び出す
- 13. C#でF#をdllとして使用
- 14. C#:なぜDLLを使用するのですか?
- 15. C++ヘッダーを使用した単純なCプログラムのリンクエラー
- 16. C++でのC#DLLの使用
- 17. Visual Studio 2012を使用してC DLLを作成する方法
- 18. C++でQTにCOM DLL(ヘッダーなし)をロードしていますか?
- 19. 私のC++ DLLでC#DLLを呼び出す方法は何ですか?
- 20. C#のプロパティ:プライベートフィールドなしでカスタムセットプロパティを使用する方法?
- 21. C#でアンマネージCOM DLLを参照せずに使用する方法
- 22. 簡単な方法DLLを使用する
- 23. 登録なしで.NET(C#)をAutoItXで使用する方法
- 24. Pythonでctypesを使用してC#dllのメソッドにアクセスする
- 25. kernel32.dll関数を呼び出す方法C++でLoadLibrary(..)を使用してGetTickCount()を呼び出す方法
- 26. C#でCの配列とポインタを使用するDLL
- 27. JavaScriptを使用してURLヘッダーをスニッファーする方法
- 28. 使用 "C" のdllは
- 29. ILSPyを使用してDLLをデバッグする方法は?
- 30. Activator.CreateInstanceFromを使用してDLLをロードする方法
[LoadLibrary関数](HTTP: //msdn.microsoft.com/en-us/library/ms684175\(v=vs.85\).aspx)[GetProcAddress](http://msdn.microsoft.com/en-us/library/ms683212 \ (v = vs.85 \)。aspx)を使用することができます。 – user786653
これらのツールを使用して入札を行うことは、常に苦労しています。それがすべてであれば、それは常に文書化されていません。あなたが成功した後、あなたは5年後まで、どのように忘れてしまいます。等々。静的にリンクする場合(ここでは、リンカが参照を追加し、DLLバインディングを実行することを意味します)、モジュール定義ファイルを調べることから始めます。おそらくあなたのツールチェーンがそれらをサポートしています。 –
多くの場合、_the_ヘッダには機能名とパラメータはありませんが、最も簡単な解決策は_a_ヘッダを自分で書くことです。 (呼び出し規約も知っておく必要がありますが、それはどんな場合でも必要です) – MSalters