Я пытаюсь создать функцию c++ в оболочке dll, которая принимает char *, преобразует ее в LPCSTR, а затем использует ее как переменную в MessageBox. Функция и преобразование отлично работают в исходном классе, но когда я пытаюсь использовать эту функцию в проекте CLR, я получаю ошибку Undeclared Identifier с переменной LPCSTR.
Пустой заголовок проекта:
#pragma once
#include <stdexcept>
using namespace std;
class StringPass {
public:
void stringPass(char *inbound);
};
Пустой файл.cpp проекта.
#pragma once
#include "NewPrototypes.h"
#include <Windows.h>
void StringPass::stringPass(char *inbound)
{
LPCSTR inBound = inbound;
MessageBox(NULL, TEXT(inBound), TEXT("Succesful Test"), MB_OK);
}
Когда я запускаю это как самостоятельный проект, он отлично работает.
Заголовок проекта CLR:
#pragma once
#include "C:\Users\Ryan\Documents\Visual Studio 2010\Projects\NewProtoClass\NewProtoClass\NewPrototypes.h"
#include "C:\Users\Ryan\Documents\Visual Studio 2010\Projects\NewProtoClass\NewProtoClass\NewPrototypes.cpp"
using namespace System;
namespace NewPrototypesDll {
public ref class StringPassWrapper
{
public:
StringPassWrapper();
void stringPassWrapper(char *inbound);
private:
StringPass *stringPassClass;
// TODO: Add your methods for this class here.
};
}
Файл.cpp проекта CLR:
#include "stdafx.h"
#include "NewPrototypesDll.h"
#include "C:\Users\Ryan\Documents\Visual Studio 2010\Projects\NewProtoClass\NewProtoClass\NewPrototypes.h"
#include "C:\Users\Ryan\Documents\Visual Studio 2010\Projects\NewProtoClass\NewProtoClass\NewPrototypes.cpp"
NewPrototypesDll::StringPassWrapper::StringPassWrapper()
{
stringPassClass = new StringPass();
}
void NewPrototypesDll::StringPassWrapper::stringPassWrapper(char *inbound)
{
stringPassClass->stringPass(inbound);
}
Когда я пытаюсь создать DLL файл, я получаю сообщение об ошибке:
1>C:\Users\Ryan\Documents\Visual Studio 2010\Projects\NewProtoClass\NewProtoClass\NewPrototypes.cpp(11): error C2065: 'LinBound' : undeclared identifier
Я пробовал все, я добавил windows.h в проект, но эта ошибка продолжает появляться. Да, я рассмотрел другие вопросы, касающиеся необъявленных ошибок идентификатора, но ни одна из них не была уникальной для моей ситуации, и ни одно из этих решений не работало. Почему это работает в первой части проекта, но не в другом?
ТЕКСТ() предназначен для литералов, а не для переменных. Обратите внимание, что в сообщении об ошибке "LinBound" - TEXT добавляет L к фронту своего аргумента в режиме Unicode, а CLR - в режиме Unicode. Либо вызывайте MessageBoxA напрямую, либо используйте MultiByteToWideChar для преобразования в Unicode.
"C:\\Users\Ryan\\...