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内に定義されているようですが、@@以下の意味が少し
わかりません。これが原因で、エントリーポイントが見つからないと
いうエラーが出ているのでしょうか?
どなかたアドバイスを頂けると幸いです。
> 確かに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