2016-07-28 21 views
-1

私はC++の完全なnewbですが、既存のC++ DLLにいくつかのメソッドを追加する必要がありました。 dllはもともとVisual Studio 2008でビルドされ、Windows 7とWindows XPで動作しました。 私のメソッドを追加してdllを作り直した後も、Windows 7では動作しましたが、XPでは動作しませんでした。 私は、JavaからDLLを呼び出すと、次の例外を取得:C++ DLL Windows 7でビルドされているときにWindows XP上で実行されない

Dependency Walker

コンパイルするためのコマンドラインオプション:私はこのことを示して、私は依存関係ウォーカーを見つけSOビットに周りに検索した後

CLI exception

/GS /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /Ob1 /Fd".\Release/" /Zc:inline /fp:precise /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "NTPROCESSDLL_EXPORTS" /D "_VC80_UPGRADE=0x0600" /D "_USING_V110_SDK71_" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /GF /WX- /Zc:forScope /Gd /Oy- /MT /Fa".\Release/" /EHsc /nologo /Fo".\Release/" /Fp".\Release/NTProcessDLL.pch"

とリンカコマンドである

/OUT:".\Release\NTProcessDLL.dll" /MANIFEST /PDB:".\Release/NTProcessDLL.pdb" /DYNAMICBASE:NO "pdh.lib" /DEF:".\NTProcessDLL.def" /IMPLIB:".\Release/NTProcessDLL.lib" /DEBUG /DLL /MACHINE:X86 /SAFESEH /INCREMENTAL:NO /PGD:".\Release\NTProcessDLL.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:".\Release\NTProcessDLL.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1

そして、私が追加されたメソッドが、これらは以下のとおりです。

void _minimizeProcess(long nPid) 
{ 
    EnumWindows(EnumWindowsProcMinimize, nPid); 
} 


BOOL CALLBACK EnumWindowsProcMinimize(HWND hwnd, LPARAM lParam) 
{ 
    HWND g_HWND = NULL; 
    DWORD lpdwProcessId; 
    GetWindowThreadProcessId(hwnd, &lpdwProcessId); 
    if (lpdwProcessId == lParam) 
    { 
     g_HWND = hwnd; 
     ShowWindow(g_HWND, SW_MINIMIZE); 
     CloseHandle(g_HWND); 
     Sleep(1); 
     return FALSE; 
    } 
    return TRUE; 
} 

これはXP上で実行して取得するためにすべてのヘルプは高く評価されるだろう。 事前に感謝します!

+0

これはWindows 7上でのビルドとは何の関係もありません。これは、XPで動作しない実行可能ファイルを作成する標準ツールセットでVS2015を使用するためです。たとえば、v140_xpツールセットが必要です。 http://stackoverflow.com/questions/35492695/when-should-i-use-vs2015-platform-toolset-v140-xp – stijn

+0

私は実際にそれを行いました。私のプラットフォームツールセットは_Visual Studio 2015に設定されています - Windows XP(v140_xp) _ – mammago

答えて

2

過去に同様の問題に遭遇しましたが、それらの_xpツールセットは決して働きませんでした。 Visual Studio 2010(LINK)をダウンロードしてインストールします。 その後、Visual Studio 2015を実行してコンパイラオプションを選択すると、新しいツールセット-vs100があるはずです。それを使ってライブラリをコンパイルすると、うまくいくはずです。

+0

あなたの答えをありがとう、私はそれを試してみる:) – mammago

関連する問題