|
分類:[C#]
分類:[C#]
開発環境:WindowsXP SP3 言語: VisualStudio2010 C#
計測器の制御で、DLLの関係でVB6で使用した固定長文字列を 使用しないとreadコマンドが読めず困っています。
/////////// VB6の場合 DLLの定義 Declare Function viRead Lib "VISA32.DLL" Alias "#256" (ByVal vi As Long, ByVal Buffer As String, ByVal count As Long, retCount As Long) As Long
Dim Instring As String * 256 256の固定長文字列になります。
viRead(vi, Instring, 256, x) viRead関数のInstringが戻り値となって 文字列が返ってきます。 //////////// VB.netの場合 Imports Microsoft.VisualBasic.Compatibilityの定義
DLLの定義 Declare Function viRead Lib "VISA32.DLL" Alias "#256"(ByVal vi As Integer, ByVal Buffer As String, ByVal count As Integer, ByRef retCount As Integer) As Integer
Dim Instring As New VB6.FixedLengthString(256) VB6用の固定長文字列になります。
viRead(vi, Instring.Value, 256, xx) viRead関数のInstringが戻り値となって 文字列が返ってきます。 ////////// C#の場合 using Microsoft.VisualBasic;の定義
DLLの定義 public static extern int viRead(int vi, string Buffer, int count, ref int retCount); [DllImport("VISA32.DLL", EntryPoint = "#219", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)]
[VBFixedString(256)]public string Instring; sts = class1.viRead(vi, Instring, 256, ref x); この定義で動作するかなと思ったのですが、Instringがnull値と なって何も文字列が返ってきませんでした。原因を調べた所、VB6は16bitで C#は32bitなので、この定義だと32bitの固定長文字列となって動作しないのでは? と思っています。元のDLLを直せばそれで直るのかなと思っているのですが、 メーカー配布のDLLの為、どうやって直したらいいのか素人の為分りません。 DLLを直さずに、動作する方法があればどなたか教えて頂きたいです。
以上よろしくお願い致します。
|