- PR -

複数のDllImportAttribute文を書くとエラーになるのですが、助けて下さい。

1
投稿者投稿内容
チキン
会議室デビュー日: 2005/03/15
投稿数: 11
投稿日時: 2005-03-16 12:52
DLL Error
以下のように書くとエラーになります。個々にはどちらもOKで実行も出来ます。
[System::Runtime::InteropServices:llImportAttribute
("D:\\Tumego\\MultiWayTree\\VBMGUM_DLL\\Debug\\VBMGUM_DLL.dll", _
CharSet =CharSet::Auto)]
extern int GetValue1000(void);
//
[System::Runtime::InteropServices:llImportAttribute
("D:\\Tumego\\MultiWayTree\\VBMGUM_DLL\\Debug\\VBMGUM_DLL.dll", _
CharSet =CharSet::Auto)]
extern int GetValue99(void);
//
エラーは
BMGUM_MG.cpp(16) : error C2363: 引数 '"_\r\nCharSet"="CharSet::Auto"' (カスタム属性'System::Runtime::InteropServices:llImportAttribute') を評価できません。
VBMGUM_MG.cpp(13) : error C3725: 'System::Runtime::InteropServices:llImportAttribute': 属性のオーバーロードを解決できません。
'System::Runtime::InteropServices:llImportAttribute:llImportAttribute(System::String __gc *)' である可能性があります。
というものです。たとえば、"Kernel32.lib"で同じように複数のDllImportを書いても問題は起こりません。絶対パスの指定も、配布とか考えて、スマートにやりたいので、パスの指定を変えればでないという、ことでもありがたいです。
なお、DLLは
int GetValue1000(void)
{
int a = 1000;
return a;
}

int GetValue99(void)
{
int a =99;
return 99;
}
で定義ファイルは
LIBRARY VBMGUM_DLL
EXPORTS
GetValue1000
GetValue99
です。
以下のような、MSヘルプの答えをみると、自分が間違えているとは思いつつ、もしかバグなら、何をやってもダメかなと思い、最悪の気分です。
>>>C2363 は、別の原因で発生する場合もあります。それらの問題点は、Visual C++ の今後のリリースで修正される予定です。>>>
どなたか、教えていただけるとありがたいのですが、よろしくお願いします。
当方、複数のEntryがあるDLLはVBから呼んだことがあります。単一のEntryの場合はVC++から呼んだことがあります。その程度の経験で、分かるよう、教えていただければ大変ありがたく、お願いします。

チキン
会議室デビュー日: 2005/03/15
投稿数: 11
投稿日時: 2005-03-25 07:19
自己レスです
MSDNの例と比べて、DLLImportAttribute ではなく、単にDLLImportでも十分と思い、DLLImportに変えました、さらに、CharSetの指定は、私の場合は不要だったので、とりました。すると、問題なく2個のEntryを区別して、テスト実行可能になりました。
全く不十分ですが、当面の解決を見ましたので、報告します。
ありがとうございました。
えムナウ
大ベテラン
会議室デビュー日: 2004/06/10
投稿数: 187
お住まい・勤務地: 東京
投稿日時: 2005-03-26 01:28
「_」は不要ではないですか?

>個々にはどちらもOKで実行も出来ます。
わたしにはこちらの方が不思議なんですが。
_________________
えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12
えムナウのプログラミングのページ Blog1 Blog2
チキン
会議室デビュー日: 2005/03/15
投稿数: 11
投稿日時: 2005-03-26 07:37
えムナウさん
ありがとうございました、極単純なことを見落としていました。_はVBの癖で、何の疑問も感じなくなっているので、1個の時に旨くいったのを、Copyして使ってました。C++のエラーメッセージはあまり賢く無いので、人間の賢さを要求されて、いつもまいってます。Borlandなどはもっと賢いメッセージを返してくれるのでしょうか?!!
非常にすっきりしました。
別のThreadで、もう少し、設計方針みたいなことを聞きたいのですが、是非よろしくお願いします。
1

スキルアップ/キャリアアップ(JOB@IT)