- - PR -
複数のDllImportAttribute文を書くとエラーになるのですが、助けて下さい。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-03-16 12:52
DLL Error
以下のように書くとエラーになります。個々にはどちらもOKで実行も出来ます。 [System::Runtime::InteropServices: ![]() ("D:\\Tumego\\MultiWayTree\\VBMGUM_DLL\\Debug\\VBMGUM_DLL.dll", _ CharSet =CharSet::Auto)] extern int GetValue1000(void); // [System::Runtime::InteropServices: ![]() ("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: ![]() VBMGUM_MG.cpp(13) : error C3725: 'System::Runtime::InteropServices: ![]() 'System::Runtime::InteropServices: ![]() ![]() というものです。たとえば、"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-25 07:19
自己レスです
MSDNの例と比べて、DLLImportAttribute ではなく、単にDLLImportでも十分と思い、DLLImportに変えました、さらに、CharSetの指定は、私の場合は不要だったので、とりました。すると、問題なく2個のEntryを区別して、テスト実行可能になりました。 全く不十分ですが、当面の解決を見ましたので、報告します。 ありがとうございました。 |
|
投稿日時: 2005-03-26 01:28
「_」は不要ではないですか?
>個々にはどちらもOKで実行も出来ます。 わたしにはこちらの方が不思議なんですが。 _________________ えムナウ Microsoft MVP for Visual Developer - C#,2005/01-2007/12 えムナウのプログラミングのページ Blog1 Blog2 |
|
投稿日時: 2005-03-26 07:37
えムナウさん
ありがとうございました、極単純なことを見落としていました。_はVBの癖で、何の疑問も感じなくなっているので、1個の時に旨くいったのを、Copyして使ってました。C++のエラーメッセージはあまり賢く無いので、人間の賢さを要求されて、いつもまいってます。Borlandなどはもっと賢いメッセージを返してくれるのでしょうか?!! 非常にすっきりしました。 別のThreadで、もう少し、設計方針みたいなことを聞きたいのですが、是非よろしくお願いします。 |
1