私はいくつかのモジュールを含む大規模な C++ プロジェクトを持っています - それらはすべて動的ライブラリにコンパイルされています。Windows、Linux、MacOSX など、複数のプラットフォームをターゲットにしています。
プロファイリング テストにより、いくつかの重要なポイントが明らかになりました。たとえば、ハッシュ コンピューティング、いくつかのベクトル操作など、パフォーマンスが大幅に向上しました。この機能を SSE/MMX を使用してアセンブリに実装しました。
インライン アセンブリが許可されていない Visual C++ の x64 ターゲットに戻すまでは、すべて問題ありませんでした。そして、私は立ち往生しています。また、これらの関数は他のモジュールでも使用されます。
基本的に、私が達成しようとしているのは、アセンブリの DLL 内にあるいくつかの関数を実装することです。私はこれを試しました:
Api.h
extern "C" void DLL_API __stdcall sample_fun(/*args*/);
Api.asm
sample_fun PROC public ;args
.....
sample_fun ENDP
名前マングリングのため、これは明らかに機能しません。
私もこれを試しました:
Api.h
void DLL_API sample_fun(/*args*/);
API.cpp
extern "C" __stdcall sample_fun_impl(/*args*/).
void DLL_API sample_fun(/*args*/)
{
return sample_fun_impl(/*args*/);
}
Api.asm
sample_fun_impl PROC public ;args
.....
sample_fun_impl ENDP
この場合、まだ解決されていない外部シンボル (sample_fun_impl) に関するリンカ エラーが発生しますが、これは奇妙です。なぜなら、これは実際にはプライベート関数であり、DLL 内からのみ呼び出されるからです。
私がやろうとしていることをすることは可能ですか?