c#调用dll的问题。这个问题困扰我很久了!
public static extern int a(string printname);
[DllImport("B.dll")]
public static extern int b(string printname);
A.dll是初始化
B.dll是执行函数
两个dll在在c#怎么不在一个运行机制里, 我用c++调用的程序先调用a(),再调用b()没问题,c#调用a()后,b()就提示初始化失败! 这个问题该怎么解决。 展开
我写了个一个测试,你看看的```
首先是A.dll,我用的是def导出,你也可以用declspec导出,但是要注意,因为declspec导出的时候,函数名可能会改变
//a.dll
int A(int a)
{
return a;
}
然后是B.dll,导出同上
//B.dll
int fun(int a)
{
return a * 3;
}
编译生成的两个dll放到你的C#版的debug下,就是可执行文件的那个目录
这是C#下的测试
using System.Runtime.InteropServices;//要包含这一句的
namespace Test
{
class Program
{
[DllImport("a.dll")]
public static extern int A(int a);
[DllImport("b.dll")]
public static extern int fun(int a);
static void Main(string[] args)
{
int a = A(2);
int b = fun(a);
Console.WriteLine("The result is {0}", b);
}
}
}
结果如下
[DllImport("A.dll")],里面我记得应该还有方法名称,等一些属性需要设置的..你可以到网上搜索一下关于c#调用非托管代码的 文章,应该比较详细...
可能是 a.dll,b.dll 共享了一些资源
a.dll包括载入几百兆的数据文件,调用A了后再调用B里面的函数,显示没有初始化,我用c++实现完全没问题,难道是调用A.dll后自动被释放内存了?