关于dll动态库在C#中的应用?解决思路
关于dll动态库在C#中的应用?
我设计了一个基于MFC AppWizard(dll-> Regular Dll using shared MFC Dll的动态库.
试例代码如下://动态库代码
extern "C " __declspec(dllexport) CString Add(CString a)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TRACE( "Entering DllAdd\n ");
return a;
}
C#代码:
[DllImport( "DllDemo5.dll ",CharSet=CharSet.Auto)]
public static extern string Add(string s);
private void Page_Load(object sender, System.EventArgs e)
{
string s=(Add( "输入结果 "));
Response.Write( "s= "+s);
}
结果网页报告错误:
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
行 32: string s=(Add( "输入结果 "));
但是如果把动态库中的CString 和C#中的string都换成 char或int等其它的,则程序正确.网页页面上能输出 "输入结果 "这串字符串.
请问这是为什么呢?我要传入字符串,要如何修改呢?
------解决方案--------------------
lpstr = str.GetBuffer(); (VC7)
------解决方案--------------------
C#的string 等于C++的char *
至于C++的CString是一个复杂的结构,C#中没有直接的类型对应
可以自己写一个完全对应的结构代替
我设计了一个基于MFC AppWizard(dll-> Regular Dll using shared MFC Dll的动态库.
试例代码如下://动态库代码
extern "C " __declspec(dllexport) CString Add(CString a)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
TRACE( "Entering DllAdd\n ");
return a;
}
C#代码:
[DllImport( "DllDemo5.dll ",CharSet=CharSet.Auto)]
public static extern string Add(string s);
private void Page_Load(object sender, System.EventArgs e)
{
string s=(Add( "输入结果 "));
Response.Write( "s= "+s);
}
结果网页报告错误:
异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
行 32: string s=(Add( "输入结果 "));
但是如果把动态库中的CString 和C#中的string都换成 char或int等其它的,则程序正确.网页页面上能输出 "输入结果 "这串字符串.
请问这是为什么呢?我要传入字符串,要如何修改呢?
------解决方案--------------------
lpstr = str.GetBuffer(); (VC7)
------解决方案--------------------
C#的string 等于C++的char *
至于C++的CString是一个复杂的结构,C#中没有直接的类型对应
可以自己写一个完全对应的结构代替