关于在非托管应用中访问托管代码一些心得

 在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日于兰州

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值