ヘルプ、してください。 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. Visual C++ sqlite3.dllを使用しないsqlite3の使用方法
- 2. Qt C++で使用するC#DLLをラップする方法は?
- 3. DLLでC#を使用してオブジェクトをロックする方法
- 4. CodeBlocks:wxWidgetsライブラリDLLを使用してC++アプリケーションをビルドする方法
- 5. C++での.hヘッダー付きDLLの使用
- 6. C++ DLLからC#コードを使用する方法
- 7. IronPythonでC#dllを使用する方法
- 8. ヘッダーを使用してWebサービスを消費する方法C#?
- 9. main関数からdll(C++)関数をC言語で使用する方法#
- 10. Visual C++でダイアログボックスを持つdllを作成する方法(Windowsアプリケーション用のDLL)
- 11. DllのC#プロジェクトでCコードを使用
- 12. C++ .exeでDLLをコンパイルする方法
- 13. Visual Studio C++でDLLを使用する
- 14. C#でDelphi DLLを使用する
- 15. COM dllをアンマネージC++で使用する
- 16. Qt C++でDLLを使用する
- 17. C#でvC++ Dllを使用する
- 18. C#でネイティブDLLを使用する
- 19. Winformアプリケーションでdllを使用するC#
- 20. DLLなしでlibcURLを使用する適切な方法は何ですか?
- 21. DLLのみを使用してアプリケーションを実行する方法は? C#。
- 22. C#のC++ヘッダーでdllを呼び出す
- 23. C#でF#をdllとして使用
- 24. C#:なぜDLLを使用するのですか?
- 25. C++でのC#DLLの使用
- 26. 異なるHTTPヘッダーでFrescoを使用する方法
- 27. Cのdirentヘッダーを使用してフォルダ内のテキストをスキャンする方法
- 28. C#アプリケーションをDLLに変換してC#アプリケーションで使用する
- 29. Visual Studio 2012を使用してC DLLを作成する方法
- 30. 私のC++ DLLでC#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