//指示该属性化方法由非托管动态链接库 (DLL) 作为静态入口点公开。
System.Runtime.InteropServices.DllImportAttribute
有时需要写上路径的如[DllImport(@"C:\OJ\Bin\Judge.dll")]这样指定DLL的绝对路径就可以正常装载。
假如没有路径的话,DllImport会按照顺序自动去寻找的地方:
1、exe所在目录 2、System32目录 3、环境变量目录
² Delphi_未测试
[ DllImport ( "WZFSE.dll" , CharSet = CharSet.Ansi ,
CallingConvention = CallingConvention.StdCall )]
public static extern void InitDll(IntPtr handle, bool methodAddress);
第一个参数是指要引用DLL的名字, 这个名字应该是个常量(否则会出错)。
CharSet 参数指示用在入口点中的字符集。如果未指定 CharSet,则使用默认值 CharSet.Auto。
CallingConvention 参数指示入口点的调用约定。如果未指定 CallingConvention,则使用默认值 CallingConvention.Winapi。
写一个函数就相应的应用起对应的DLL。
[DllImport ( "user32.dll" , CharSet = CharSet.Ansi ,
CallingConvention = CallingConvention.StdCall )]
public static extern void MoveWindow ( IntPtr handler , int x , int y ,
int width , int height , bool repaint );
如何将Dephi的窗体显示在自己的页面中(且不能显示Delphi窗体的标题栏,实现无缝的结合)。
http://www.cnblogs.com/elivn/archive/2010/11/19/1881686.html
Delphi一般类型对应如下:
Dephi-->C#
intger -->int longint -->long
pchar -->string THandle -->IntPtr
Char[]-->string
例:
Delphi DLL中的方法:
function GetXMLByNet(piChartType: integer; psXMLFileName: PChar; psPriChartFileName: PChar; psSecChartFileName: PChar; out psPriHotMsg: PChar; out psSecHotMsg: PChar): integer; stdcall;export;
private class DrawChartFromDll
{
private const string _fileDll = @"Chart.dll"; //定义DLL文件名,此文件路径要加到系统Path中
[DllImport ( _fileDll , EntryPoint = "GetXMLByNet" , CharSet = CharSet.Ansi ,
CallingConvention =CallingConvention.StdCall )]
//调用非托管Dll,