問題タブ [dllexport]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
2701 参照

dllimport - 未解決の外部シンボル

ソリューションには 2 つの WIN32 DLL プロジェクトがあり、main.dll は mgn.dll の関数を呼び出す必要があります。

mgn.dll には mgn.h ヘッダー ファイルがあります。

mgn.cpp ソース ファイル:

main.dll は、ソース ファイルの 1 つから AttachMGN 関数を呼び出します。

mgn.dll は正常にコンパイルされます。main.dll は VS テキスト エディターでエラーを表示しません。「定義へ移動」機能を使用してナビゲートできます。ただし、ビルド中にエラーが発生します。

エラー LNK2019: 関数 "bool __cdecl CreateClient(void)" で参照されている未解決の外部シンボル __imp__AttachMGN (?CreateClient@@AW4XZ)

両方の DLL が同じフォルダーにコンパイルされます。DependencyWalker は、AttachMGN 関数がエクスポートされていることを示しています。それが重要な場合、メイン プロジェクトには Mgn プロジェクトへの依存関係が設定されています。

私は単に何かを見落としていると信じています....

前もって感謝します。

0 投票する
8 に答える
6630 参照

c# - C#DLLを作成し、アンマネージC++から使用する

私はネイティブの(管理されていない)C ++アプリケーションを持っています(価値のあるもののためにwxWidgetsを使用しています)。WinFormベースのダイアログを含む別のツールアプリケーションをC#で作成することを検討しています。これらのダイアログの一部を別のDLLに配置すると、C++アプリからそれらを使用できるようになりたいので便利です。

しかし、これを達成するためにどれだけの混乱が必要かわかりません。特に簡単ですか?

編集

ダイアログ関数を直接呼び出す必要はありません。データを渡すためにC++アプリがC#DLLのAPIを呼び出す方法と、C#DLLがC++アプリのある種のオブザーバー/バックオブジェクトのメソッドを呼び出す方法が必要です。

例:C ++から:

ユーザーがC#ダイアログで何かを行うと、pCSOメソッドが呼び出されてデータがC++に返されます。

ですから、これはC ++ / C#のコミュニケーションに関する生の質問だと思います。しかし、C ++とC#は知っていますが、.net自体がどのように機能するかはわかりません。私はCOMを知っていますが、実際には避けたいと思っています。一緒に仕事をしている他の開発者がCOMを知っているとは思えません。

0 投票する
3 に答える
3904 参照

c++ - C++ DLL-Linking UnResolved Externals

私が取り組んでいるかなり大きなCoreプロジェクトがあり、私が構築したDLLエンジンを使用するように適応させようとしています.次のようなエラーがたくさん発生しています:

未解決の外部シンボル "プライベート: 静的クラス

Core のヘッダーの一部を DLL に含める場合、クラスは __declspec(dllexport) を介してエクスポートされますが、静的メンバーを含むヘッダーは、静的メンバーに関する大量のエラーをスローします。

これはかなり大きなプロジェクトです。私が見るすべての静的クラス メンバーを正確に削除することはできません。とにかく、この種のことはありますか?

インポートされるクラスの基本的な例:

わかりやすくするために、クラス実装ファイルで m_someVar が定義/宣言されている(用語を忘れる)ことに対処したいと思います

0 投票する
1 に答える
458 参照

c# - 2つのアンマネージC++関数を2つのマネージC#関数にラップする方法は?

2つのアンマネージC++関数CompressDecompress。引数と戻り値は次のようになります。

unsigned char * Compress(unsigned char *、int)

unsigned char * Decompress(unsigned char *、int)

ここで、すべてのucharはucharの配列です。

unsigned char*の代わりにByte[]配列を使用してこれらをマネージドC#コードに変換する方法を誰かが教えてくれませんか?どうもありがとうございます!

0 投票する
2 に答える
12847 参照

dll - 静的関数のDLLエクスポート

私は次の静的関数を持っています:

この関数をDLLにエクスポートできますか?もしそうなら、どのように?

ありがとう、

マイク

背景情報:

元のソースコードには、静的(.lib)ライブラリとしてコンパイルするように設計されたVSプロジェクトが付属していたため、これを行っています。ctypes / Pythonを使用するために、プロジェクトをDLLに変換しています。

VSプロジェクトをDLLとして開始し、元のソースコードをインポートしました。プロジェクトはDLLに組み込まれますが、関数(上記のような関数を含む)はエクスポートされません(ソースコードにdllexportがないことと、DLL Export Viewerなどのツールの両方で確認されています)。ここで一般的なアドバイス(ヘッダー内にエクスポート可能なラッパー関数を作成する)に従おうとしましたが、役に立ちませんでした...関数はまだエクスポートされていないようです。

0 投票する
3 に答える
4434 参照

dllexport - dll をエクスポートしていますが、GetProcAddress が 127 エラーを返します。解決方法を教えてください。

0 投票する
2 に答える
1136 参照

java - Java用のVBA/Excelからdll/exeへ

サード パーティのアドインを使用する手動入力機能を備えた Excel ファイルがあります。Excelファイルの機能をJavaで使いたい。私はそれを行う2つの方法を考えることができました:

  1. 関数を VBA でコーディングするか、Excel リファレンスを使用して VB でコーディングし、Java が使用する .dll または .exe ファイルを生成します。

  2. jxl を使用してデータを Excel ファイルにフィードし (Excel ファイルは新しいデータを受信すると自動的に更新されますか?)、Excel ファイルから毎回新しい結果を読み取ります。

ExcelやVBAの経験があまりありません。どの方法がより実行可能で高速かを知りたいです。

0 投票する
3 に答える
1576 参照

c++ - DLLからのC++クラスのエクスポート

名前のマングリングの問題を回避するために、C ++ DLLからクラス全体をエクスポートする代わりに、抽象インターフェイスを使用する方法について説明しているCodeProjectに関するこの記事に出くわしました。作成者Release()のインターフェイス定義には、使用後にクラスオブジェクトのリソースを解放するためにユーザーが呼び出すことになっているメソッドがあります。このメソッドの呼び出しを自動化するために、作成者はオブジェクトを削除する前std::auto_ptr<T>にメソッドを呼び出す-likeクラスも作成します。Release()

代わりに次のアプローチが機能するかどうか疑問に思いました。

もちろん、GetXyz()の代わりにヘッダーで定義されたグローバル関数にすることもできます#defineauto_ptrこのメソッドの利点は、メソッドを呼び出す独自の派生物を作成する必要がないことですRelease()

答えてくれてありがとう、アシッシュ。

0 投票する
1 に答える
299 参照

c++ - 明示的にロードされたDLL関数への静的ポインタを使用してクラスを作成する

DLLInterfaceクラスの複数のインスタンスが必要ですが、各オブジェクトには同じDLL関数へのポインターがあるため、これらを静的にします。

以下のコードはコンパイルされません。(以下の簡略化されたコードでは説明されていない、同じポインターを含む複数のインスタンスが必要になる理由があります。)

このヘッダーファイルにもすべてのコードを含める必要があります。(次のようなステートメントをEXEのcppファイルに追加することでコンパイルできることはわかっていますが、これは避ける必要があります。

HINSTANCE DLLInterface :: hindstDLL = 0;

ありがとう!

0 投票する
2 に答える
190 参照

c# - DLL の修正方法

外部DLLを次のように使用しています:

次に、同じパターンに新しいメソッドを追加します。DemoExport.dll でメソッドを実装する方法があるかどうかを調べています。そのため、DemoMethod() というメソッドを次のように使用できます。

クレイジーな質問のように見えるかもしれませんが、このメソッドを実装する必要があるので、後で同じものを使用できます。

さらに、上記が不可能な場合は、新しい dll を作成する方法や、C# では使用できない DllExport などの使用方法を教えてください。したがって、後で、誰でも属性付きのメソッドを使用できます