| > では、out が指定されているので、RecvBuffer には何も値を代入しないまま GpibRecieve() を呼び出しても問題なさそうですが。 > > P/INVOKE の宣言自体が間違っている、とかなら別ですが。
GP-IBのVB関連マニュアルには・・・
データ受信においては受信用の配列変数を用意します。配列のサイズですが、必ず「受信データ 長」+「デリミタ」を考慮したバイトサイズを指定します。受信データ長が 16バイト,デリミタ が「CR+LF」の場合には、16+2の18バイト以上の領域を確保する必要があります。
と記載があります。
チュートリアル Visual BasicによるGP-IB入門書 より引用。
● Microsft Visual Studio .NET移行ガイド には・・・
[DllImport("gpc43042.dll")] public static extern int GpibReceive(uint ulBoardNo, int[ ] lpAdrsTbl, ref uint dwpLength, ref byte pvBuffer); [DllImport("gpc43042.dll")] public static extern int GpibReceive(uint ulBoardNo, int[ ] lpAdrsTbl, ref uint dwpLength, byte[ ] pvBuffer); [DllImport("gpc43042.dll")] public static extern int GpibReceive(uint ulBoardNo, int[ ] lpAdrsTbl, ref uint dwpLength, IntPtr pvBuffer);
と記載されています。
と言うことは、間違ってる?
以上。 |