LoadStringでOPenCVのヘッダをインクルードするとビルドエラーになります。

[戻る]
sakana 2010/11/25(木) 15:30:19
下記記述でLoadStringを呼び出しています。

・宣言
[DllImport("User32", CharSet=CharSet::Auto)]
extern "C" int LoadString(HINSTANCE,int,String^,int);

・呼び出し部
System::String^ Form1::GetString(int id)
{
  System::String^ str = gcnew System::String(' ', 256);
    int lng = LoadString(NULL, id, str, 256);
    return str->Substring(0, lng);
}

その際、下記OpenCVのヘッダファイルを読み込むとエラーとなります。

#include "cv.h"
#include "highgui.h"

・エラー内容
error C2664: 'LoadStringW' : 3 番目の引数を 'System::String ^' から 'LPWSTR' に
変換できません。

どうして、ヘッダなしだとビルドでき、有りだとビルドできなくなるのでしょうか。
また解決策がありましたらご教示いただけないでしょうか。
wchra_tに変換したり、いろいろしたのですが、解決できません。

VC2008 C++/CLI ExpressEditionを使用しています。

よろしくお願いいたします。

subaru 2010/11/26(金) 17:37:48
OpenCVのヘッダファイルから間接的にWinUser.hがインクルード
されているように思えます。
(この場合マクロでLoadString→LoadStringWに読みかえられます)

LoadStringW APIを直接使うのであればDllImport宣言の方は不要で
wchar_t型で受け取ればいいように思えますが、
>wchra_tに変換したり、いろいろしたのですが、解決できません。
どのようにうまくいかないでしょうか。

リンクの方が失敗しているならソースのどこかに
#pragma comment(lib, "user32.lib")
と書いておけばうまくいくかもしれません。

古いスレッドには追加発言できません。