C ++人脸检测与c#WPF结合

时间:2018-12-07 08:33:05

标签: c++ opencv

我下载并研究了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 ++的初学者,如果你们需要更多代码,请告诉我)

2 个答案:

答案 0 :(得分:0)

这听起来像字符集错误。请在Visual Studio项目设置中尝试将字符集更改为multibyte

答案 1 :(得分:0)

API函数有宽字符串和ASCII版本,在函数名称后分别附加了“ W”或“ A”。 GetUserName默认使用宽字符串变体。

如果您不关心多字节字符串,可以使用GetUserNameA,其参数为:&UserName[0]和字符串的预定义长度。

但是,如果这样做,只需将UserName的类型更改为wstring,然后以相同的方式将参数传递给函数。不要忘记也包括“ wstring.h”。