chuanyueniwo 2018-11-22 06:06 采纳率: 0%
浏览 1608
已结题

Windows Mono C#调用C++ DLL DllNotFoundException 问题

我在windows7 环境下安装了最新版本的mono,运行了一些helloworld程序正常运行。
问题:我有一个C#项目,C#调用了C++的一个动态库,如果我用VS2008运行C#或者直接运行编译出的exe程序,都能正常调用C++dll, 但是我如果用mono 运行 exe程序就会报动态库找不到,System.DllNotFoundException。dll库就是求和功能,贴上 C++dll源码:sum.h

 #pragma once 
extern "C" _declspec(dllexport) int _stdcall sum(int a ,int b);

sum.cpp

 #include "Sum.h"
int _stdcall sum(int a,int b)
{
    return a + b;
}

C#工程源码:

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace TestCppDLL
{
    class Program
    {
        [DllImport("GetSum", EntryPoint = "sum", CallingConvention = CallingConvention.StdCall)]
        public extern static int sum(int a, int b);
        static void Main(string[] args)
        {
             int num = sum(1,2);
            System.Console.WriteLine(num);
            System.Console.ReadLine();
        }
    }
}

自己搜索了一下:说是要在mono 的config中指定 dll 于是配置Mono安装目录下/etc/mono
/config文件:

 <dllmap dll="GetSum.dll" target="C:/path/GetSum.dll"/>

运行还是同样的错误。我又单独配置了GetSum.dll.config 内容:

 <configuration>
    <dllmap dll="GetSum.dll" target="C:/path/GetSum.dll" />
</configuration>

依然是同样的错误!!!!!

哪位大神给解答下啊。。。。。

  • 写回答

2条回答 默认 最新

  • threenewbee 2018-11-22 06:09
    关注

    mono没有用过,比较怀疑你的程序是不是编译成64bit的了,所以无法找到32bit的dll

    还有,难道你在linux下运行?那没法用dll,linux下的动态库是so,要用gcc的编译器、链接器。你google下

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?