我下载并研究了C ++中的代码,其中Caffe和OpenCV用于面部识别。目前,该代码被编写为控制台应用程序,它将打开一个带有网络摄像头“实时流”和面部识别功能的窗口。
现在我读到,如果我要将程序添加到WPF,则需要使C ++部分成为DLL,并将其实现为C#。但是我的问题是这个代码:
int init(int argc, const char** argv)
{
char acUserName[100];
string UserName;
DWORD nUserName = sizeof(acUserName);
if (GetUserName(acUserName, &nUserName)) {
UserName = acUserName;
string errorPath = "C:/Users/" + UserName + "/Desktop/ErrorLog.txt";
const char *errorChars = errorPath.c_str();
...
}
我发现此代码用于在c ++中获取当前用户名,init方法实际上是主要方法,只是使用了一个新名称。但是当我在DLL版本中键入此代码时,Visual Studio会显示错误
argument of type "char*" is incompatible with parameter of type "LPWSTR"
和其中的“ acUserName”
if (GetUserName(acUserName, &nUserName))
被标记。我该如何解决?
(我是C ++的初学者,如果你们需要更多代码,请告诉我)
答案 0 :(得分:0)
这听起来像字符集错误。请在Visual Studio项目设置中尝试将字符集更改为multibyte
。
答案 1 :(得分:0)
API函数有宽字符串和ASCII版本,在函数名称后分别附加了“ W”或“ A”。 GetUserName
默认使用宽字符串变体。
如果您不关心多字节字符串,可以使用GetUserNameA
,其参数为:&UserName[0]
和字符串的预定义长度。
但是,如果这样做,只需将UserName
的类型更改为wstring
,然后以相同的方式将参数传递给函数。不要忘记也包括“ wstring.h”。