問題タブ [extern]
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.
c++ - DLL のエクスポートされた関数の名前マングリングを停止するにはどうすればよいですか?
「GetName」という関数をエクスポートする DLL を作成しようとしています。マングルされた関数名を知らなくても、他のコードでこの関数を呼び出せるようにしたいと思います。
私のヘッダーファイルは次のようになります。
私のコードは次のようになります。
ビルドすると、DLL は引き続き "_GetName@0" という名前の関数をエクスポートします。
私は何を間違っていますか?
c# - p/invoke で使用できるように C++ 関数を設定する方法は?
これが脳みそで簡単な質問であることを願っていますが、これは私の C++ に関する専門知識の欠如を示しています。私は C# プログラマーであり、過去に他の人の C++/C dll を使用して P/Invoke で広範な作業を行ってきました。ただし、今回はラッパー C++ dll (アンマネージ) を自分で作成することにし、C# からラッパー dll を呼び出しています。
私がすぐに直面している問題は、p/invoke で見つけられる C++ 関数を定義できないことです。これの構文が何であるかはわかりませんが、これまでに試したことは次のとおりです。
もともと私はこれを持っていましたが、どちらも機能しませんでした:
そして、C# 側では、次のようにしています。
すべてがコンパイルされますが、この C# p/invoke 呼び出しを実行すると、System.EntryPointNotFoundException: Unable to find an entry point named 'TestFunc' in DLL 'Plugins\TestDLL.dll' が発生します。
確かに、これは構文を知らない C++ 側では信じられないほど単純なものに違いありません。
c++ - dll プロジェクト間で extern メソッドを使用しますか?
私が持っているメモリを管理するためのデバッグ条件があります
これは Memory.h に存在し、Memory.cppに実装されています。Memory.h は次のように定義されます。
現在、別のプロジェクトにあるSoundStuff.hとSoundStuff.cppがあり、上記と同様の方法で dll に変換されています。所属するプロジェクトSoundStuff
には、所属するプロジェクトへのプロジェクト依存関係がありMemory
ます。SoundStuff.cpp の実装では、FUN_DELETE
Memory.hからが呼び出されます。別のプロジェクトの関数を介して呼び出されますが、関係なく呼び出されます。これにより、リンカー エラーが発生します。
エラー LNK2019: 未解決の外部シンボル "void __cdecl operator delete(void *,char const *,int)" (??3@YAXPAXPBDH@Z) 関数 __unwindfunclet$?Init@SoundStuff@@AAEXXZ$1 で参照されている SoundStuff.obj
これはなぜですか、どうすれば修正できますか?
c++ - 'operator new': 再定義、異なるリンケージ (再定義された new 演算子で _dllspec を使用)
私は __declspec(dllimport/export) を new のデバッグ バージョンで使用しています。
これは私が得る原因です
エラー C2375: 'operator new': 再定義。異なるリンケージ。
これはなぜですか、どうすれば修正できますか? これは、私が現在コンパイルしている唯一のプロジェクトです。
c# - C#: shlwapi.dll の StrCmpLogicalW の実装または代替
私のアプリケーションで自然な並べ替えを行うために、現在、shlwapi.dll で StrCmpLogicalW という関数を P/Invoke しています。Mono でアプリケーションを実行しようと考えていましたが、もちろん、この P/Invoke を使用することはできません (とにかく私が知る限り)。
そのメソッドの実装をどこかで見ることは可能ですか、それとも同じことを行う、クリーンで効率的な C# スニペットがありますか?
私のコードは現在次のようになっています。
したがって、私が探しているのは、 extern 関数を使用しない上記のクラスの代替です。
c++ - C++ソースからのC-DLL
C++フレームワーク用のCラッパーがあります。これはMacとWindowsで実行する必要があるため、私はsconsを使用しています:
単純なバージョンのwarplib.cppとwarplib.hは次のようになります。
Warplib.cpp
Warplib.h
誰かがそれの何が悪いのか教えてもらえますか?'extern "C"'の可能なほとんどすべての組み合わせを試しましたが、常に "エラーC2732:リンケージ仕様が'...'の以前の仕様と矛盾します"のようなものがスローされます。
'extern "C"'をスキップすると機能しますが、.libファイルが表示されないため、ライブラリを実際に使用するにはそれが必要であると確信しています。
c - C で extern を使用しても期待どおりに動作しない
2 つのファイルを作成しました。
tunables.h
および tunables.c
私のプロジェクトの他のすべてのファイルには、「tunables.h」が含まれています。プロジェクトをロードすると、Ac と Bc の両方がtunables_load_conservativeを呼び出しますが、しばらくして、ファイル Bc のファイル Ac tunables_load_aggressive ()を呼び出すと、 timer_xは 3 のままです。なぜですか?
これは私の Makefile です:
c++ - C での「extern」ストレージ クラス指定子の使用
extern 指定子の次の使用例はどのように動作しますか。
ファイル one.c と two.c の両方にグローバル変数 int x があります。これらを three.c で使用したいので、この変数を three.c で次のように宣言しました。
extern int x;
これらのファイルをコンパイルしてリンクするとどうなるでしょうか?
私の答えは次のとおりです。これらすべてのファイルのコンパイルは成功するはずですが、x が複数宣言されているため、リンカはリンク時にエラーにフラグを立てる必要があります。C++ での動作に違いはありますか?
C と C++ の両方のファイルから int x (three.c 内) を同時に参照する方法はありますか。C++ では、名前空間を使用してこれを実現できると思います。右?
c++ - C++ 外部クラス定義
私は行くいくつかのコードを読んでいます:
extern はクラス宣言またはインスタンスを参照しますか?
c++ - extern と const の混合
extern constのように extern と const を混在させることはできますか? はいの場合、const修飾子は、宣言されているスコープ内でのみ支配することを課しますか、それとも宣言されている翻訳単位の宣言と正確に一致する必要がありますか? extern const int i;
つまり、実際のiが const でない場合でもsay を宣言できますか? またその逆も可能ですか?