c#调用dll的问题。这个问题困扰我很久了!

[DllImport("A.dll")]publicstaticexterninta(stringprintname);[DllImport("B.dll")]publi... [DllImport("A.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()就提示初始化失败! 这个问题该怎么解决。
展开
 我来答 举报
北堂一刀
2012-08-20 · 超过55用户采纳过TA的回答
知道小有建树答主
回答量:112
采纳率:0%
帮助的人:87.9万
展开全部

我写了个一个测试,你看看的```

 

首先是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);

        }

    }

}

结果如下

 

 

 

 

 

变成新手
2012-08-20 · 超过21用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:49.8万
展开全部
这个东西很古老了,但是还是有很少人在用,extern就是为了引用底层函数库的,c++只是其中一种适合的API而已,虽然没写过,但是要在c#里面调用c++库,首先你这个特性描述就不是很正确
[DllImport("A.dll")],里面我记得应该还有方法名称,等一些属性需要设置的..你可以到网上搜索一下关于c#调用非托管代码的 文章,应该比较详细...
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
leiyangbdwk
2012-08-20 · TA获得超过3295个赞
知道大有可为答主
回答量:4975
采纳率:12%
帮助的人:4398万
展开全部
我也不是很懂那个,看dll就烦。。
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
百度网友5fee74946
2012-08-21
知道答主
回答量:13
采纳率:0%
帮助的人:9.7万
展开全部
具体要看是什么具体的初始化错误,
可能是 a.dll,b.dll 共享了一些资源
追问
a.dll包括载入几百兆的数据文件,调用A了后再调用B里面的函数,显示没有初始化,我用c++实现完全没问题,难道是调用A.dll后自动被释放内存了?
抢首赞 已赞过 已踩过<
你对这个回答的评价是?
评论 举报 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式