c翻译成c#问题,请问这个应该如何翻译,谢谢各位大神
typedef int ( *GrammarCallBack)( int, const char*, void*);
int MSPAPI QISRBuildGrammar(const char *grammarType, const char *grammarContent, unsigned int grammarLength, const char *params, GrammarCallBack callback, void *userData);
typedef int (MSPAPI *Proc_QISRBuildGrammar)(const char *grammarType, const char *grammarContent, unsigned int grammarLength, const char *params, GrammarCallBack callback, void *userData);
typedef struct _UserData {
int build_fini; //标识语法构建是否完成
int update_fini; //标识更新词典是否完成
int errcode; //记录语法构建或更新词典回调错误码
char grammar_id[MAX_GRAMMARID_LEN]; //保存语法构建返回的语法ID
}UserData;
=============================================上面是c的代码
=============================================下面是我写的c#,但是会有内存错误
public class QISRDLL
{
public struct UserData {
public int build_fini; //标识语法构建是否完成
public int update_fini; //标识更新词典是否完成
public int errcode; //记录语法构建或更新词典回调错误码
public string grammar_id; //保存语法构建返回的语法ID
};
//
#region ISR dllimport
[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
static extern int QISRBuildGrammar( string grammarType,ref string grammarContent, ref int grammarLength, ref string grammar_params, build_grm_cb call,ref UserData ud);
[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
static extern int MSPLogin(string user, string password, string configs);
[DllImport("msc.dll", CallingConvention = CallingConvention.Winapi)]
static extern int MSPLogout();
#endregion
static int MSP_SUCCESS = 0;
public delegate int build_grm_cb(int ecode, string info, ref UserData ud);
public int bg(int ecode, string info, UserData ud)
{
return 0;
}
public int build_grammar()
{
//
return 0;
}
public static int msplogin()
{
string login_config = "appid = 58e02a9b"; //登录参数
int ret = 0;
ret = MSPLogin("", "", login_config); //第一个参数为用户名,第二个参数为密码,传NULL即可,第三个参数是登录参数
if (MSP_SUCCESS != ret)
{
//printf("登录失败:%d\n", ret);
//goto exit;
}
return ret;
}
static public UserData getUserData()
{
return new UserData
{
build_fini = 0,
update_fini = 0,
errcode = -1,
grammar_id = ""
};
}
public static int build_gm()
{
//
build_grm_cb myDelegate = new build_grm_cb(CallbackFunc);
UserData bgdata = getUserData();
string grm_content = File.ReadAllText(@"call.bnf");
int grm_cnt_len = System.Text.Encoding.Default.GetBytes(grm_content).Length;
string grm_build_params = "engine_type = local, asr_res_path = fo|res/asr/common.jet, sample_rate = 16000,grm_build_path = res/asr/GrmBuilld, ";
int ret = QISRBuildGrammar("bnf",ref grm_content, ref grm_cnt_len,ref grm_build_params, myDelegate,ref bgdata);
//上面这句就是问题所在
return ret;
}
public static int CallbackFunc(int ecode, string info, ref UserData ud)
{
Console.WriteLine("参数1: {0}", ecode);
Console.WriteLine("参数2:{0}", info);
return 0;
}
}