代码之家  ›  专栏  ›  技术社区  ›  ljs TheVillageIdiot

用指针使用P/JooCK实例化C++中的C++类

  •  1
  • ljs TheVillageIdiot  · 技术社区  · 16 年前

    我正在从C应用程序中的非托管dll mscorpe.dll导入createiceefilegen()函数,以便生成PE文件。此函数返回指向C++对象的指针。 defined here ,是否有任何方法可以通过C访问此类中的字段,或者是否需要编写非托管包装程序dll?

    我目前使用的代码如下:

    [DllImport(@"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorpe.dll", EntryPoint = "CreateICeeFileGen")]
    static extern void CreateICeeFileGen(out IntPtr iceeFileGenPointer);
    ...
    IntPtr filePtr;
    CreateICeeFileGen(out filePtr);    
    

    N.B. :我知道您可以对.NET库执行类似的操作,但出于我的目的,我需要使用非托管库。

    2 回复  |  直到 5 年前
        1
  •  2
  •   Rob Walker    16 年前

    您需要一个包装库才能使用C中的类。

    最好的方法是使用C++/CLI创建包装器,它可以直接调用非托管函数并用托管类公开细节。这将消除对任何事情使用p/invoke的需要。

    (好吧,从技术上讲,如果你知道类的布局,你可能会用指针算术来访问字段,但这将是非常脆弱和混乱的,试图用这种方式调用虚拟函数将是非常丑陋的)。

        2
  •  0
  •   leppie    16 年前

    它看起来像COM类/接口。你不能只用com代替吗?