C#调用非托管DLL,窗口关闭后报错,求教!
以前做此类报销接口的时候其他厂商也很多是非托管DLL,但是没有出现过此类情况。百度了很长时间,有的说资源释放问题,有的说是A.DLL自身没有做好处理,各种各样的方案吧。然后自己又写了一个CS的Demo来测试A.DLL,发现我调用完A.DLL中的某些方法成功,如果我直接关闭Demo.exe,也是会报下面图片上的错误:无效的窗口句柄。
实在是没有解决思路了,所以到万能的CSDN上找大家帮帮忙。虽然接口已经做好,不影响正常使用,但是每次关闭主程序的时候都会弹出这个错误,感觉还是不舒服。谢谢大家不吝指教。如果大家有解决方案尽量给出几句代码示例。或者稍微详细一些,因为本人现在实在不知道出现此问题的原因,也没什么解决思路。
唯一的一点思路,就是当我执行完A.DLL的方法的时候,能够将A.DLL进行释放。以及简单的代码示例,我将调用A.DLL中的各方法封装成一个IRCIANInterfaceHandle类,下面的代码中只封装了其中的一个方法当演示。
public class IRCIANInterfaceHandle
{
//A.DLL提供的获取就诊号
[DllImport("A.dll")]
private static extern int GetRecCode(StringBuilder strCode);
#region 联网获取就诊号
/// <summary>
/// 我的联网获取就诊号方法
/// </summary>
/// <returns></returns>
public string GetRegCode()
{
DataBuffers= new StringBuilder(5000);
//调用A.DLL的GetRecCode方法联网获取就诊号
int iRe = GetRecCode(DataBuffers);
if (iRe!=0)
{
LogManager.RecordException("联网获取医保就诊号失败!","N获取就诊号");
throw new Exception("联网获取医保就诊号失败!");
}
else
{
return DataBuffers.ToString();
}
}
#endregion
}
下面的代码就是,如果我的程序有需要去获取就诊号的话,我就去调用IRCIANInterfaceHandle类中的 GetRegCode方法,示例代码如下
private void TestMethod()
{
string MzCode="";
IRCIANInterfaceHandle iRsoft= new IRCIANInterfaceHandle();
MzCode=iRsoft.GetRegCode();
}
假如说我现在已经执行完获取就诊号这个方法,也获取成功了,我现在直接关闭我的程序,那就会报下面图片中的错误。
错误图片如下:

因为是自己为了说明问题,所以代码基本上就是为了说明思路手敲的,意思应该能说明白。
多谢各位!!在线等!
相关推荐
非托管C++调用C#的dll
C#调用C++编写的dll,一般都是直接用dllimport,这个资料很多。C++调用C#编写的dll,一般方法都是先用托管C++将C#的dll进行一次封装,然后由非托管C++调用封装好的dll。
C#调用OpenVINO实现高精度指甲分割实战
指甲分割(Nail Segmentation)是一种面向医学影像级精度的细粒度语义分割任务,其核心挑战在于小目标识别、边缘模糊性抑制与皮肤背景强干扰下的鲁棒性建模。基于深度学习的分割模型(如U-Net变体)需依托高效推理引擎落地,而OpenVINO凭借跨平台支持、INT8量化能力及硬件加速(GPU/NPU)成为边缘部署首选。然而,C#生态缺乏官方绑定,直接P/Invoke易引发内存泄漏与指针悬空;AForge/OpenCV等传统库受限于阈值依赖,难以应对光照、肤色、甲油类型变化。本文聚焦C#与OpenVIN
c#调用非托管dll
c#调用非托管dll c#调用非托管dll c#调用非托管dll c#调用非托管dll
C# 调用外部dll的方法
动态链接库(也称为DLL,即为“Dynamic Link Library”的缩写)是Microsoft Windows最重要的组成要素之一,打开Windows系统文件夹,你会发现文件夹中有很多DLL文件,Windows就是将一些主要的系统功能以DLL模块的形式实现。 动态链接库是不能直接执行的,也不能接收消息,它只是一个独立的文件,其中包含能被程序或其它DLL调用来完成一定操作的函数(方法。注:C#中一般称为“方法”),但这些函数不是执行程序本身的一部分,而是根据进程的需要按需载入,此时才能发挥作用。 此文仔细介绍了C#中如何调用外部动态库,是C#开发人员必会技能。
c#对当前窗口进行关闭等操作
获取到该窗口句柄后,可以对该窗口进行操作.比如,关闭该窗口或在该窗口隐藏后,使其显示


