ヘッダーファイルから関数をエクスポートしているVisual C++で書かれたDLLがあります。私はエクスポートするすべての機能を別の名前の関数でラップしています。名前を難読化し、ライセンスなしで機能を使用しようとする人には難しいものです。現在、この形式は次のようになります。このDLLヘッダーファイルをより再利用可能にする方法
#ifdef EXPORTS
#define API extern "C" __declspec(dllexport)
#else
#define API extern "C" __declspec(dllimport)
#endif
CustomObject *MeaningfulFunction1(PCWSTR param);
API CustomObject *ObfuscatedName1(PCWSTR param)
{
return MeaningfulFunction1(param);
}
void MeaningfulFunction2(CustomObject *param1, int param2, int ¶m3, int ¶m4);
API void ObfuscatedName2(CustomObject *param1, int param2, int ¶m3, int ¶m4)
{
MeaningfulFunction2(param1, param2, param3, param4);
}
//repeat this style many times
これはエクスポートには問題ありません。今までこのDLLを呼び出すコードはすべてC#で書かれていたので、今まではインポートのためのヘッダーは必要ありませんでした。
このヘッダはObfuscatedNameN
てObfuscatedName1
定義を持っているので、私は、extern "C" __declspec(dllimport)
定義を持っているにもかかわらず、輸入のために動作しない、とMeaningfulFunction1
のためのエクスポート定義がMeangingfulFunctionN
てありません。
は、私はこのような何かを見て、それを修正することができます知っている:
#ifdef EXPORTS
CustomObject *MeaningfulFunction1(PCWSTR param);
#endif
API CustomObject *ObfuscatedName1(PCWSTR param)
#ifdef EXPORTS
{
return MeaningfulFunction1(param);
}
#else
;
#endif
しかし、それは数十の機能のために書くのは面倒であり、全体的に目障り。 このスキームを動作させる簡単な方法はありますか?プリプロセッサの定義を変更することをお勧めします。 私はこれが最初の部分は簡単ですが、私は第二部のためのスキームのような単純な見つけることができませんでした
#ifdef EXPORTS
#define OUT //
#else
#define OUT
#endif
OUT CustomObject* MeaningfulFunction1(PCWSTR param);
のようなものを考えました。プリプロセッサが見る前にコメントが削除されるので、これは機能しません。
普通の名前を1つのブロックに並べ替えることができますし、2番目の難読化された名前を付け加えることができますが、どちらを修正するかを簡単に伝えるために隣接させます。ありがとう!
これはひどい考えのようです。 –
@Captain私の会社は難読化を要求しています。私はただそれをサポートするための最も苦痛な方法を見つける必要があります。 – Cody