C#からDLL呼出しのエントリーポイントについて

[戻る]
Seisuke 2009/12/23(水) 03:42:35
C#初心者です。

よく出ている質問にはなるかもしれまんせんが、現在
C#からCで作ったDLLを呼出そうとしています。

DLLimportで、下記のよう定義し、実際に呼出ししようとすると、
エントリーポイントが見つからないとエラーが出ました。

[DllImport("abc.dll" , EntryPoint = "abc_end")]
        public static extern int abc_end(string a);

そこで、実際にabc.dll内で、abc_endの関数が定義されている
かをdumpbin /exportsで見ると、ordinal hint RVAの箇所に下記
とありました。

1   0 001260 ?abc_end@@YAHPBD@Z

確かにDLL内に定義されているようですが、@@以下の意味が少し
わかりません。これが原因で、エントリーポイントが見つからないと
いうエラーが出ているのでしょうか?

どなかたアドバイスを頂けると幸いです。

YuO [E-Mail] 2009/12/23(水) 14:36:13
> 確かにDLL内に定義されているようですが、@@以下の意味が少し
> わかりません。これが原因で、エントリーポイントが見つからないと
> いうエラーが出ているのでしょうか?

abc.dllにあるのは,
?abc_end@@YAHPBD@Z
という名前の関数であって,
abc_end
ではないためにエラーになっています。
@@以下はVC++が引数等より自動でつける名前です。

VC++以外からでもabc_endという名前で呼び出せるようにしたい場合は,
__declspec(dllexport)に頼らず,モジュール定義ファイルを書く必要があります。
MSDN: EXPORTS
http://msdn.microsoft.com/ja-jp/library/hyx1zcd3.aspx

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