2011-09-14 108 views
3

嗨,我創建了C#EXE COM服務器,並從VB6應用程序引用它。 問題是,所有的枚舉暴露在vb應用程序中的「奇怪的名字」:EnumName_EnumeItem,而從VB6代碼緩存爲EnumName.EnumItem。C#Com枚舉和VB6

VB6應用程序代碼無法修改。 想知道我看到我可以通過改變tlb的idl提取來改變這個定義,但是沒有完全理解它是如何完成的,以及這個工作的工具是什麼。

任何建議如何儘可能輕鬆地設置枚舉?

代碼:

public enum enResultCode : uint 
{ 
    enRCNone = 0x00000000, 
    enRCNotFound = 0x00000001, 
    enRCFoundOnServer = 0x00000002, 
    enRCFoundOnLocal = 0x00000003, 
    enRCDatabaseError = 0x00000004, 
    enRCAborted = 0xFFFFFFFF, 
    enRCServerError = 0xFFFFFFFE, 
    enRCLocalError = 0xFFFFFFFD 
} 

中所示爲VB6:

enter image description here

代替:

enResultCode.EnumItemName 

回答

2

我認爲你是正確的做到這一點的唯一方法是自己修改IDL。我可以告訴你一些關於它是如何完成的...

  1. 您運行tlbexp.exe從您的C#程序集創建tlb。
  2. 您運行oleview.exe以打開該tlb並檢查IDL。您可以將該IDL保存到文件或複製/粘貼它。
  3. 您編輯IDL以爲其指定所需的枚舉項目名稱。
  4. 您運行midl.exe以從您修改的IDL生成tlb。

這應該夠了。對不起,我不能給你所有正確的命令行開關,但我現在不在Windows機器上。

+0

這由[本文]備份(http://blogs.artinsoft.net/mrojas/archive/2010/05/17/interop-remove-prefix-from-c-enums-for-com.aspx ) – Deanna

+0

謝謝。我有一些從idl創建tlb的問題。稍後將對此進行評論(之後我會得到答案)。 –