使用DllImport调用C ++函数

时间:2011-10-31 15:21:45

标签: c# .net c++ unmanaged dllimport

这是基本的,如何在C#DllImport中调用以下函数SubscribeNewsFeed?

class LogAppender : public L_Append
{
public:
    LogAppender()
        : outfile("TestLog.txt", std::ios::trunc | std::ios::out)
        , feedSubscribed(false)
    {
        outfile.setf(0, std::ios::floatfield);
        outfile.precision(4);
    }



    void SubscribeNewsFeed()
    {
        someOtherCalls();
    }

};

我在C#程序中使用DllImport时无法弄清楚如何包含类名:

 class Program
    {

        [DllImport("LogAppender.dll")]
        public static extern void SubscribeNewsFeed();

        static void Main(string[] args)
        {
            SubscribeNewsFeed();
        }
    }

2 个答案:

答案 0 :(得分:4)

PInvoke不能用于以这种方式直接调用C ++函数。相反,您需要定义一个extern "C"函数,该函数将PInvoke函数和PInvoke调用到该函数中。另外,您不能将PInvoke转换为类实例方法。

C / C ++代码

extern "C" void SubscribeNewsFeedHelper() {
  LogAppender appender;
  appender.SubscribeNewsFeed();
}

C#

[DllImport("LogAppender.dll")]
public static extern void SubscribeNewsFeedHelper();

答案 1 :(得分:1)

P / Invoke不起作用。它只能导入C函数。因此,托管(C#)和本机(C ++)世界之间存在不同类型的互操作。通过COM的Interop将是一个解决方案 - 提供另一个C接口。