日期:2014-05-20  浏览次数:20905 次

把.net类转成COM类型出的问题
用以下两个命令编译都说TestEmailer.dll格式不正确。
tlbimp   TestEmailer.dll   /out:TestEmailerCOM.tlb
tlbexp   TestEmailer.dll   /out:TestEmailerCOM.tlb
具体异常如下:
RegAsm   :   error   RA0000   :   保存导出的类型库时出错:I/O   错误。   (异常来自   HRESULT:0x80
028CA2   (TYPE_E_IOERROR))
现把整类内容考来,求高手指点错误。
using   System;
using   System.Collections;
using   System.IO;
using   System.Collections.Generic;
using   System.Text;
using   System.Net;
using   System.Net.Mail;
using   System.Net.Mime;
using   System.Web;
using   System.Security.Cryptography;
using   System.Threading;
using   System.Security;
using   System.Runtime.InteropServices;

namespace   TestEmailer
{
[Guid( "0bb13346-7e9d-4aba-9ff2-862e0105489a ")]  
    public   interface   ICSharp      
    {      
    [DispId(1)]  
              void   sendmailMethod();      
    }      
[Guid( "ba0a3019-f0d8-4406-8116-f80d5515c686 "),ProgId( "TestEmailer.MailM2 "),ClassInterface(ClassInterfaceType.None)]  
        class   MailM2
        {
                public   void   sendmailMethod()
                {
……………………
                }
        }
  }


------解决方案--------------------
给你修改一下试试:

1、程序修改:
namespace TestEmailer
{
[interfaceType(ComInterfaceType.InterfaceIsDual)]
public interface ICSharp
{
void sendmailMethod();
}
[ClassInterface(ClassInterfaceType.AutoDual)]
class MailM2:ICSharp
{
public void sendmailMethod()
{
……………………
}
}
}

2、创建类型库:

tlbexp TestEmailer.dll

执行后将生成TestEmailer.tlb,用COM Object Viewer看看。