DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DllImport属性について

環境/言語:[XP,vb.net2003,Framework1.1]
分類:[.NET]

お世話になっております。
先程も質問したのですが、追加質問です。
vb2005をvb2003に置き換える作業をしているのですが、
また分からないことがあるので教えて下さい。

-2005
<UnmanagedFunctionPointer(CallingConvention.Cdel)> _
Public Delegate Sub XXXXX(ByVal Pos As Integer)
でリビルドできている。

-2003
<UnmanagedFunctionPointer(CallingConvention.Cdel)> _
Public Delegate Sub XXXXX(ByVal Pos As Integer)
でリビルドすると型UnmanagedFunctionPointerが宣言されていません。と
エラーになります。UnmanagedFunctionPointerは2005からなので使用できない
のは分かるのですが、2003でどのように置き換えればいいのか分かりません。
MSDNをみる限りDllImport属性を使用してできそうなことを書いてあるの
ですが、私には理解できません。置き換え方も知りたいのですが、この辺の
内容を詳しく説明しているようなページがあれば教えて下さい。

お願いします。
この辺のコードサンプルとかどうでしょうか。
(DllImportが含まれています。)
http://support.microsoft.com/kb/890894/ja
■No22175に返信(Azuleanさんの記事)
> この辺のコードサンプルとかどうでしょうか。
> (DllImportが含まれています。)
> http://support.microsoft.com/kb/890894/ja

返信ありがとうございます。
サンプルコードをみてみました。言われたいのは、EntryPointに同一プロシージャ
名を指定するということなのでしょうか?ちなみに試してみましたが

<DllImport("xxx.dll",EntryPoint:="XXXXX",CharSet:=CharSet.Ansi,CallingConvention:=CallingConvention.Cdel)> _
Public Delegate Sub XXXXX(ByVal Pos as Integer)
としても 属性DllImportAttributeをXXXXXに適用できません。この属性はこの種類の宣言では有効ではありませんとエラーになります。

おそらくですが、Delegate自体にこの記述が使用できないような気がしています。
というのがSharedとかにするとエラーにならないので・・・
急いではいないのですが、この辺の部分は理解して変換したいので
分かる方いらっしゃいましたらお願いします。
んーと、確か .NET 1.x では不可能だったような気が。
C とか Managed C++ とかでラップしないと駄目なんじゃなかったかな。
// もう記憶がおぼろ。
と思ったらリフレクションで動的に CallConvCdecl カスタム修飾子を付けるなんて手があるらしい。こいつは盲点。
http://www.codeproject.com/KB/dotnet/Cdecl_CSharp_VB.aspx
申し訳ないです。
質問をよく理解せずに書いていました。

UnmanagedFunctionPointerってそういう存在だったんですね…。
■No22181に返信(Hongliangさんの記事)
> んーと、確か .NET 1.x では不可能だったような気が。
> C とか Managed C++ とかでラップしないと駄目なんじゃなかったかな。
> // もう記憶がおぼろ。
> と思ったらリフレクションで動的に CallConvCdecl カスタム修飾子を付けるなんて手があるらしい。こいつは盲点。
> http://www.codeproject.com/KB/dotnet/Cdecl_CSharp_VB.aspx

返信ありです。参考リンクからダウンロードしてみているのですが
さっぱり・・・とほほ
色々調べているので、進展があったらまた報告します。

DOBON.NET | プログラミング道 | プログラミング掲示板