0
我正在使用C#中的C++ DLL。除了一个接受输入字符串指针并填充数据的函数之外,一切正常。我有DLL的源代码,以及上述功能的代码是这样的:在C#中调用DLL中的C++代码以获取字符串
int CDLL::GetCode(char *CodeN)
{
int year, cn, sn1;
year = m_dwCode >> 24;
year += 2000;
sn = (m_dwCode >> 8) & (0xFFFF);
sn1 = m_dwCode & (0xFF);
if (sn1 != 0) {
sprintf(CodeN, "%d-%d-%d", year, cn, sn1);
}
else {
sprintf(CodeN, "%d-%d", year, sn);
}
return 1;
}
本身导出与此功能:
_declspec(dllexport) int WINAPI GetCode(char *sn)
{
return ((CDLL*)AfxGetApp())->GetCode(sn);
};
我试图将其导入了一些不同的方式,但似乎没有工作;我总是找回垃圾,而不是预期的代码。
这是最后一次进口我已经试过:
[DllImport("CDLL.dll", CallingConvention = CallingConvention.Winapi)]
internal extern static int GetCode([param: MarshalAs(UnmanagedType.LPTStr), Out()] StringBuilder sn);
这是调用代码:
StringBuilder myCode = new StringBuilder("xxxx-yyyyy-zzz");
Wrapper.GetCode(myCode);
return myCode.ToString();
但我总是末了垃圾成字符串,一字符串比我所期望的要长。
注意,有人问它之前:在DLL好的工作,已使用多年,在VB.Net软件,我测试/在一个完全的工作环境发展。
只是为了保持完整性,VB代码声明为 (BYVAL SC作为字符串) 并调用
Dim tempCode As String
tempCode = "xxxx-yyyyy-zzz";
GetCode(tempCode);
定义入口点呀,UTB部分在重写这里的内容时出错 – motoDrizzt