我要完成一个功能,类似于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#调用?
谢谢.