« SqlServerCeとClickOnce | トップページ | オリジナルライブラリを、IntelliSenseに対応させる »

2009年1月 9日 (金)

VB用DLLをC#から呼び出す

VB6向けに作られたDLLを呼び出すのは、通常のDLL呼び出しと同じ。

ただし、固定長文字列を含む構造体を引数とするDLLの場合はオプションの指定が必要。

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
    public struct AuthMemberInfo
    {
        /// <summary>ユーザーID</summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 9)]
       
public string userID;

        /// <summary>ユーザー名</summary>
       [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
        public string userName;
    }

fixed char vendor[31]等でも可能だが..

  • unsafeだらけになってしまう
  • 文字列とchar配列の変換が必要
  • 構造体のポインタの記述が必要

など、ひどく面倒になる。

また、文字配列のサイズに注意する。たとえば、VBで30文字の場合、C#では31文字必要になる場合がある。うまくいかない場合は、+1してやってみること。

« SqlServerCeとClickOnce | トップページ | オリジナルライブラリを、IntelliSenseに対応させる »