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

我在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个回答

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

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

chuanyueniwo
chuanyueniwo 程序编译成x86 32位了,我注意这一点了。 我是在windows下运行的。C++库是用vs2008编译的
一年多之前 回复

解决了,下载了个32位mono 可以正常运行了.......... 64位的mono 不可以。。。。 大坑啊。害我搞了好长时间

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐