C#调用VC编写的DLL时的问题!!!!!急急急急急!!!!!

NoirCheng 2007-06-19 11:32:47
有个别人用VC写好的DLL。我要在C#中调用,具体代码如下:
[DllImport("mono.dll")]
private static extern int RunEvaluation();

public static int Evaluation()
{
return RunEvaluation();
}

RunEvaluation()为mono.dll中的函数。程序第一次调用RunEvaluation()时可以正常运行。但是,当程序不退出第二次运行到此处调用RunEvaluation()就会报未将对象引用设置到对象的实例这个错误!
mono.dll在VC上调试没有错误,多次运行RunEvaluation()也不会报错。
各位大侠帮帮忙!公司项目蛮急的!!!!!谢谢拉!!!!!
...全文
265 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
NoirCheng 2007-06-21
  • 打赏
  • 举报
回复
[DllImport("MotorControlDll.dll",EntryPoint="Add",ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]
public static extern int Add(int a,int b);
_______________________________________________________________

这种方法我试过了,说是找不到入口点
xxelement 2007-06-19
  • 打赏
  • 举报
回复
你自己先debug一下看看。
lxsfg 2007-06-19
  • 打赏
  • 举报
回复
public static int Evaluation() 这个方法不用静态的,改成public int Evaluation()试一下
NoirCheng 2007-06-19
  • 打赏
  • 举报
回复
自己顶
canybox 2007-06-19
  • 打赏
  • 举报
回复
转自http://blog.csdn.net/marsmao/archive/2005/12/15/552716.aspx
看看是不是你哪个地方没有设置正确啊


如何在C#中使用C/C++写的DLL。举一个我做过的例子说明:
建立VC工程DllDemo,建立的时候选择MFC AppWizard(dll),选择Regular Dll using shared MFC Dll或者MFC Extension Dll。
现在可以写一个函数代码,在DllDemo.cpp文件中添加这些代码。也可以使用新的文件添加代码;
extern “C“ __declspec(dllexport) int Add(int a,int b)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TRACE("Entering DllAdd\n");

return a+b;
}

编译工程。

下面建立一个C#的WinForm程序测试DllDemo:
启动vs.net IDE,建立新的C#工程,选择WinForm应用程序。
在Form1.cs中添加引用:using System.Runtime.InteropServices;
在pulic class Form1声明的开头添加代码:
[DllImport("MotorControlDll.dll",EntryPoint="Add",ExactSpelling=false,CallingConvention=CallingConvention.Cdecl)]
public static extern int Add(int a,int b);

至于DllImport属性的用法可以察看MSDN,对于各项参数有详细的说明。

最后还要记得将DllDemo生成的位于Debug文件中DllDemo.dll文件加入到C#的WinForm程序的bin目录下。
这样就可以直接使用Add(int a,int b)函数。

还有一个问题是Web Application应用程序中,将需要加载的*.dll文件添加到bin目录下面,而在一个WinFowm Application应用程序中,需要将*.dll文件添加到bin/debug目录下面才行!

goodsss 2007-06-19
  • 打赏
  • 举报
回复
我觉得可能是组件本身引用计数器的问题,在引用完之后自动释放对象空间!
你可以考虑能否在前面直接将该对象实例化,而不自动释放,在关闭程序的时候再释放!
这是《COM原理和应用》一书中的一个基本问题!
这就要求你在引用一个组件前一定要了解该组件的一些基本接口和对象引用的具体情况,
但这不代表它是一个普遍问题!
greenery 2007-06-19
  • 打赏
  • 举报
回复
应该是dll里面的问题,不关C#调用的。能否调试进入dll,看具体那里出错了。
NoirCheng 2007-06-19
  • 打赏
  • 举报
回复
xxelement(未知元素) ( ) 信誉:100 Blog 加为好友 2007-06-19 11:51:09 得分: 0

你自己先debug一下看看。
——————————————————————————————————————

能不能具体一些 谢谢


NoirCheng 2007-06-19
  • 打赏
  • 举报
回复
lxsfg(飞飞) ( ) 信誉:100 Blog 加为好友 2007-06-19 11:50:55 得分: 0

public static int Evaluation() 这个方法不用静态的,改成public int Evaluation()试一下
___________________________________________________________________________

试过了,还是出同样的错误

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧