| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1708 人关注过本帖
标题:如何在C#中调用C++编写的dll,要求从参数返回一个长字符串.
只看楼主 加入收藏
seraphW
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-11-28
收藏
 问题点数:0 回复次数:0 
如何在C#中调用C++编写的dll,要求从参数返回一个长字符串.

我要完成一个功能,类似于Google中输入一个查询,点击“Google 搜索”,就可以返回一系列的相关文档。

首先我编写了这样一个简单的C++动态链接库,名字叫做IndriNullDll.dll。
=======runquery.h========
#include<string>

using namespace std;

extern "C"__declspec(dllexport) void runquery(char **query,char **result);

========runquery.cpp=============
#include"runquery.h"
#include <windows.h>
#include <stdio.h>

void runquery(char **query,char **result)
{
string r;
r = "字字字字字字";
sprintf(*result,"%s",r.c_str());

}

之后,为了在C#中调用该DLL,我又编写了一个C#类DllMethods:
==========DllMethods.cs=================
using System;
using System.Runtime.InteropServices;

namespace indri
{
public class DllMethods
{
public DllMethods()
{

}

[DllImport("IndriNullDll.dll")]
public static extern void runquery(ref string query,ref string result);

}
}

最后,我建立了一个ASP.NET的Web应用程序。网页上只放置了一个文本框TBQuery,一个按钮BtnSearch和一个面板PnlResult.
我为按钮被点击编写了如下的代码:
private void BtnSearch_Click(object sender, System.EventArgs e)
{
string query = "空";
string result;
result = "空";
query = TBQuery.Text; //读取用户在文本框中的输入
DllMethods.runquery(ref query,ref result); //调用DLL中的函数
PnlResult.Controls.Add(new LiteralControl(result)); //将返回的字符串显示到面板上.
}

该程序编译通过,并且能够正确执行.
但是,当我修改runquery.cpp中的
r = "字字字字字字";

r = "字字字字字字字字字字字字";
后,(仅仅增加了r的长度)
编译通过,但是执行时显示如下提示框:
JIT 调试失败,出现以下错误: 拒绝访问

点击确定后,网页上显示:
服务器应用程序不可用
您试图在此 Web 服务器上访问的 Web 应用程序当前不可用。请点击 Web 浏览器中的“刷新”按钮重试您的请求。


请问这是什么原因造成的?如何才能够从C++的DLL中返回一个很长的字符串给C#调用?
谢谢.

搜索更多相关主题的帖子: dll 参数 字符 编写 
2005-11-28 19:16
快速回复:如何在C#中调用C++编写的dll,要求从参数返回一个长字符串.
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033536 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved