怎样在托管的C++.Net(类库、应用程序)中使用扩展的MFC DLL类
我有一个扩展的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?如何调用?




