1

IActiveScriptParse32インターフェイスを実装するために .NET 2.0 を使用して C# COM クラスを作成しています。RegAsm.exe を使用して TLB ファイルを生成する場合、EXCEPINFO 構造を含むインターフェイス メソッドはエクスポートされません。RegAsm.exe が EXCEPINFO 構造をエクスポートしないのはなぜですか?

インターフェイスとクラスの宣言:

using System.Runtime.InteropServices;
using ComTypes = System.Runtime.InteropServices.ComTypes;        

namespace ScriptEngine
{
    [Guid("BB1A2AE2-A4F9-11cf-8F20-00805F2CD064")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IActiveScriptParse32
    {
        void InitNew();
        void AddScriptlet([MarshalAs(UnmanagedType.LPWStr)] string defaultName, 
                          [MarshalAs(UnmanagedType.LPWStr)] string code, 
                          [MarshalAs(UnmanagedType.LPWStr)] string itemName, 
                          [MarshalAs(UnmanagedType.LPWStr)] string subItemName,
                          [MarshalAs(UnmanagedType.LPWStr)] string eventName, 
                          [MarshalAs(UnmanagedType.LPWStr)] string delimiter, 
                          IntPtr sourceContextCookie, 
                          uint startingLineNumber, 
                          ScriptTextFlags flags, 
                          [MarshalAs(UnmanagedType.BStr)] out string name,
                          out ComTypes.EXCEPINFO exceptionInfo);
        void ParseScriptText([MarshalAs(UnmanagedType.LPWStr)] string code, 
                             [MarshalAs(UnmanagedType.LPWStr)] string itemName, 
                             [MarshalAs(UnmanagedType.IUnknown)] object context, 
                             [MarshalAs(UnmanagedType.LPWStr)] string delimiter,
                             IntPtr sourceContextCookie, 
                             uint startingLineNumber, 
                             ScriptTextFlags flags, 
                             out object result, 
                             out ComTypes.EXCEPINFO exceptionInfo);
    }


    [ComVisible(true)]
    [Guid("70C3474B-CFE3-4CBB-89F3-E9C70386BCB5")]
    public class MyScriptParser : IActiveScriptParse32
    {
        // Other interface methods

        public void ParseScriptText(string code, string itemName, object context, string delimiter, IntPtr sourceContextCookie, uint startingLineNumber, ScriptTextFlags flags, out object result, out ComTypes.EXCEPINFO exceptionInfo)
        {
            //Code
        }
    }
}

RegAsm.exe は次の警告を生成します。

タイプ ライブラリ エクスポーターの警告処理 'ScriptEngine.IActiveScriptParse32. ParseScriptText(exceptionInfo)、MyScriptParser'. 警告: 非 COM 可視値型 'System.Runtime.InteropServices.ComTypes.EXCEPINFO' は、現在エクスポートされている型またはその基本型のいずれかから参照されています。

そして、次の宣言で .tlb ファイルを生成します。

[
  odl,
  uuid(BB1A2AE2-A4F9-11CF-8F20-00805F2CD064),
  version(1.0),
  oleautomation,
  custom(0F21F359-AB84-41E8-9A78-36D110E6D2F9, "ScriptEngine.IActiveScriptParse32")
]
interface IActiveScriptParse32 : IUnknown {
    HRESULT _stdcall InitNew();
};
4

1 に答える 1