我正在使用dllexport
从Delphi调用C#编写一个DLL。
基础知识非常简单且有效,但我想公开一个返回用特定消息填充字符串的函数(不返回字符串)。我这样做的方式是Delphi向函数发送一个类型为宽字符串(LPWSTR
)的指针,然后填充它。这很好用。然而,当我这样做时,我需要释放内存,这是我不确定我做对了什么的地方。
DLL构建在一个实现IDisposable
的类中。这是因为我需要在函数执行后释放内存。
这是班级和这一个功能。
为了释放我分配的内存,我声明了一个全局静态intPtr
,我将其作为dispose发布。这是代码。
很乐意获得任何反馈
namespace simpleDLL
{
public class Test : IDisposable
{
public delegate int prog(int i);
static IntPtr s_copy;
bool disposed = false;
[DllExport("getString", CallingConvention = CallingConvention.Cdecl)]
public static int getString(out IntPtr s, [MarshalAs(UnmanagedType.LPWStr)] string str)
{
s_copy = (IntPtr)Marshal.StringToHGlobalUni(str);
s = s_copy;
return str.Length;
}
public void Dispose()
{
Dispose(true);
}
// Protected implementation of Dispose pattern.
protected virtual void Dispose(bool disposing)
{
if (disposed)
return;
if (disposing)
{
Marshal.FreeHGlobal(s_copy);
// Free any other managed objects here.
//
}
// Free any unmanaged objects here.
//
disposed = true;
}
~Test()
{
Dispose(false);
}
}