CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VC.NET

怎样在托管的C++.Net(类库、应用程序)中使用扩展的MFC DLL类

楼主autuwater(小秋水)2003-12-03 10:53:36 在 .NET技术 / VC.NET 提问

我有一个扩展的MFC   DLL类库(offlineorder_v20.dll),声明如下:  
  #pragma   once  
   
  class   __declspec(dllexport)     IOrderHandle      
  {  
  public:  
  IOrderHandle(void);  
  ~IOrderHandle(void);  
  BOOL   SendOrder(LPCSTR   strOrderID,   long&   lResult);  
  void   SetUserName(LPCSTR   strUserName);  
  void   SetUserPassword(LPCSTR   strPassword);  
  void   GetErrorInfo(long   &lErrorID,   long   &lErrorCode,   LPSTR&   strErrorDesc);  
  };  
   
  现在我编写了一个托管的C++类(TestDLLSample)。声明如下:  
  public   __gc   class   TestDLLSample  
  {  
  public:  
  [DllImport(S"OfflineOrder_v20.dll",   CharSet=CharSet::Auto,   EntryPoint=S"IOrderHandle")]  
  static   void   IOrderHandle();  
   
  [DllImport(S"OfflineOrder_v20.dll",   CharSet=CharSet::Auto,   EntryPoint=S"SetUserName")]  
  static   void   SetUserName(String*   strUsername);  
   
  [DllImport(S"OfflineOrder_v20.dll",   CharSet=CharSet::Auto,   EntryPoint=S"SetUserPassword")]  
  static   void   SetUserPassword(String*   strPassword);  
   
  [DllImport(S"OfflineOrder_v20.dll",   CharSet=CharSet::Auto,   EntryPoint=S"SendOrder")]  
  static   bool   SendOrder(String*   strOrderID,   long   lResult);  
   
  [DllImport(S"OfflineOrder_v20.dll",   CharSet=CharSet::Auto,   EntryPoint=S"GetErrorInfo")]  
  static   void   GetErrorInfo(long   l1,   long   l2,   StringBuilder*   strOrderID);  
  };  
   
  程序编译连接都能够通过,但是呢?运行的时候出现“System.EntryPointNotFoundException:   无法在   DLL   OfflineOrder_v20.dll   中找到名为   IOrderHandle   的入口点。  
        at   TestXXX.TestDLLSample.IOrderHandle()”  
   
  我去掉了“[DllImport(S"OfflineOrder_v20.dll",   CharSet=CharSet::Auto,   EntryPoint=S"GetErrorInfo")]”中的“EntryPoint”属性,情况依然。  
   
  我的理解是:“DllImport”属性类只是支持封装在Windows   DLL   中的一些普通函数,虽然这个也叫DLL类库,但每一个函数是独立的,如:  
  int   __declspec(dllexport)   MyMethod(int   i)  
  {   return   i*10;}。  
   
  现在我的这种MFC   DLL扩展类库,其中的类本身就可以实例化,所以,不知道怎么使用在托管的C++中。举个例子:怎样将MFC中CString类使用托管C++类进行包装,然后使用在托管的环境之中!  
   
  谢谢告知,最好有一个流程。高分奉送! 问题点数:0、回复次数:4Top

1 楼autuwater(小秋水)回复于 2003-12-03 11:54:51 得分 0

大家出出意见吧!急啊,在线等待!Top

2 楼wwl1981(小刀(奋斗成就人生))回复于 2003-12-04 10:11:18 得分 0

System.EntryPointNotFoundException  
   
  是不是你的扩展MFC有问题Top

3 楼Muf(沐枫)回复于 2003-12-04 11:06:33 得分 0

1.   想直接用dllimport,只能是普通的函数,而不能是C++的类或其成员函数  
  2.   你可以另加一个dll,将类包装成managed   dll。  
        可参考MSDN:   Managed   Extensions   for   C++   Migration   Guide   (Part   I:   wrapping   unmanaged   C++   classes   with   Managed   Extensions   for   C++   classes   that   act   as   proxies.   )Top

4 楼autuwater(小秋水)回复于 2003-12-04 16:06:02 得分 0

结束贴子:  
   
      Muf(沐枫)     --   100分  
   
   
  看来我的思维是正确的,谢谢Top

相关问题

  • c#中怎样调用非托管DLL
  • 原型为int _stdcall omrg(char * buf)的非托管DLL在C#里怎么调用?
  • 高手请进,请问如何在C#里面动态调用非托管的DLL。
  • 求教,自己写的非托管dll,在c++里调用函数成功了,在c#里却提示找不到入口点。
  • 关于C#包装C++非托管dll:“ dllTest.exe - 无法找到入口: 无法定位程序输入点 ?GetRecNext@CRdMgwQueAccess@@QAEHPAUStRdRecMgwQue@@@Z
  • C#里面有关事件托管
  • 什么叫C++托管???(大量散分)
  • 请帮忙看看C#调用非托管DLL中的函数无法从结构指针中返回值的问题
  • 求教! C#托管代码调用非托管时出现的 NullReferenceException 异常.
  • 非托管程序能否调用托管的dll?如何调用?

关键词

  • c++
  • 扩展
  • 函数
  • dll
  • mfc
  • v20
  • offlineorder
  • iorderhandle
  • 托管
  • entrypoint

得分解答快速导航

  • 帖主:autuwater

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo