C# 调用C++;使用DllImport的函数

C# 调用C++;使用DllImport的函数,c#,.net,c++,unmanaged,dllimport,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:

这是一个基本函数,我如何从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();
        }
    }

PInvoke不能用这种方式直接调用C++函数。相反,您需要定义一个

extern“C”
函数,该函数调用PInvoke函数并将PInvoke调用到该函数中。此外,不能将PInvoke插入到类实例方法中

C/C++代码< /P>

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


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

即使在C++中,也需要实例化一个LogAppender来调用它。
[DllImport("LogAppender.dll")]
public static extern void SubscribeNewsFeedHelper();