c# - 使用 DllImport 调用 C++ 函数

标签 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();
        }
    }

最佳答案

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();

关于c# - 使用 DllImport 调用 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955734/

相关文章:

c# - PostSharp - il 编织 - 想法

c# - 如何使用 MVC3 创建部分类别列表

c# - 如何获得下一个工作日,不包括周末和节假日

c++ - 在 cgo 库中链接第 3 方静态库

c# - 执行 ajax 调用并发布 json 时的 ASP.NET Outputcache

c# - 使某个网址仅在 48 小时内有效

c++ - 修改文件ios_init.cc中的libstdc++-v3

c++ - 将 avx 变量传递给 std::function 时引发 bad_function_call 和段错误

c# - 什么是应用域?

c# - 从finallys抛出异常时,不评估捕获 block