在delphi6/7、PB、VC6等不支持.net开发环境中编写程序中能不能访问托管代码呢?今天探索了一下,最终成功,可能比较笨,提出来与大家探讨。
首先声明,我不是说鼓励大家这么做,只是为了解决历史遗留问题(版本升级),或其他用途。
开发工具:delphi7,vs2005;操作系统:win2003server
思路:利用VC2005作桥梁,完成数据交互。因为VC2005能够支持在非管代码中直接访问托管代码,所以在VC2005中编写动态链接库,在链接库中直接访问托管代码,完成数据交互。
步骤1:首先用C#开发一个托管类:
namespace Test
{
public class ClassHello
{
public ClassHello()
{
return;
}
public string GetText()
{
return "Hello word";
}
}
}
步骤2:使用VC2005开发动态链接库:
1)选择新建MFC DLL;
2)在属性页中 属性配置->常规->公共运行语言库支持->公共语言运行库支持(/clr)
3)在属性页中 属性配置->常规->MFC使用->在共享 DLL 中使用 MFC
4)在此项目中引用 步骤1开发的C#项目
5)添加接口函数如下:
int WINAPI GetHello(wchar_t* r)
{
//声明托管类型
Test::ClassHello^ c=gcnew Tone::Class1();
//从托管类型中获取数据
CString s= c->GetText();
wcscpy(r,s.GetBuffer());
delete c;
return s.GetLength();
}
步骤3在delphi7中调用步骤2开发的dll
function GetHello(r:pwchar):integer ;stdcall;External 'VCTest.dll'; //声明
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a:pWchar;
begin
try
getmem(a,256);
gets(a);
Application.MessageBox(a,'从C#中传来的",MB_OK);
freemem(a);
except
end;
end;
end.
杨卫国 2006年9月7日于兰州