Curently я отказываюсь от своих строковых значений константы от моего C++ в мой C# при запуске через обратный вызов, но я задаюсь вопросом, существует ли способ определить их в заголовочном файле C++, к которому я могу затем также обратиться в C#.
Я уже делаю это с перечислениями, поскольку они легки. Я включаю файл в оба своих проекта библиотеки C++ (через.h файл с прагмой после того как наверху), и мое приложение C# (как ссылка):
#if _NET
public
#endif
enum ETestData
{
First,
Second
};
Я знаю, что это звучит грязным, но это работает :)
Но... как я могу сделать то же со строковыми константами - я первоначально думаю, что синтаксис слишком отличается между платформами, но возможно существует путь?
Используя умный синтаксис, включающий #if _NET, #defines и т.д.?
Используя файлы ресурсов?
Используя C++ / библиотека CLI?
Какие-либо идеи?
Назовите меня смешным, но я думаю, что лучший способ сделать это - использовать C ++ / CLI и C ++.
Это позволяет вам # включать одни и те же строки в два разных контекста и позволить компилятору творить чудеса. Это даст вам массивы строк
// some header file
L"string1",
L"string2",
L"string3",
// some C++ file
static wchar_t*[] string = {
#include "someheaderfile.h"
};
// in some C++/CLI file
array<String^>^ myArray = gcnew array<String^> {
#include "someheaderfile.h"
};
, в противном случае вы можете сразу использовать препроцессор C:
// in somedefineset
#define SOME_STRING_LITERAL L"whatever"
// in some C++ file
#include "somedefineset.h"
const wchar_t *kSomeStringLiteral = SOME_STRING_LITERAL
// in some C++/CLI file
literal String ^kSomeStringLiteral = SOME_STRING_LITERAL;
Строковая константа в C# будет иметь вид:
public const string MyString = "Hello, world";
Я думаю, что в C++ предпочтительным способом является:
const std::string MyString ="Hello, world";
string
в C# - это просто псевдоним для типа .NET, String
. Один из способов сделать это - сделать в C++ #define:
#define String const std::string
И ваш обычный код будет выглядеть так:
// at the beginning of the file
#if !_NET
#define String const std::string
#endif
// For each string definition
#if _NET
public const
#endif
String MyString = "Hello, world";
Должен признаться, что я не пробовал, но похоже, что это будет работать.