Pertanyaan C # Enum dalam C ++ Library


Saya mengalami masalah saat menggunakan public enum didefinisikan dalam C # dalam Antarmuka C ++. Proyek .NET terkena COM yang akan digunakan dalam perangkat lunak C ++ dan VB.

Kode C #:

namespace ACME.XXX.XXX.XXX.Interfaces.Object
{
   [Guid(".....")]
   [InterfaceType(ComInterfaceType.InterfaceIsDual)]
   [ComVisible(true)]
   public interface TestInterface
   {
       void Stub();
   }

   [ComVisible(true)]
   public enum TestEnum
   {
        a = 1,
        b = 2
   }
}

Kode C ++:

Edit: Dalam idl untuk proyek saya mengimpor tlb. (importlib("\..\ACME.XXX.XXX.XXX.Interfaces.tlb"))

interface ITestObject : IDispatch
{
  [id(1), helpstring("one")]
  HRESULT MethodOne([in] TestInterface *a);

  [id(2), helpstring("two")]     
  HRESULT MethodTwo([in] TestEnum a);
}

Di MethodTwoSaya terus membuat kesalahan

Kecuali Jenis Spesifikasi dekat TestEnum

Saya berasumsi ada sesuatu yang tidak saya lakukan dengan benar. MethodOne tampaknya menemukan referensi dengan benar.

Apakah ada sihir untuk merujuk objek .NET enum di antarmuka C ++?


7
2018-03-23 14:40


asal


Jawaban:


Enums adalah cukup unik, perpustakaan jenis yang Anda dapatkan dari proyek C # Anda tidak memiliki typedef TestEnum. Anda dapat menulisnya seperti ini sebagai gantinya:

  [id(2), helpstring("two")]     
  HRESULT MethodTwo([in] enum TestEnum a);

Perhatikan yang ditambahkan enum kata kunci. Atau Anda dapat mendeklarasikan typedef Anda sendiri jika Anda menggunakan identifier di banyak tempat atau membutuhkannya dalam kode C ++ Anda, taruh sebelum deklarasi antarmuka Anda:

  typedef enum TestEnum TestEnum;

Anda mungkin lebih suka yang terakhir.


2
2018-03-23 15:34