当然,我在启动时通过回调将我的常量字符串值从我的C传递到我的C#中,但我想知道是否有一种方法可以在C头文件中定义它们,然后我也可以在C#中引用它们.
我已经用枚举这样做,因为它们很容易.
我在我的C库项目中都包含一个文件(通过顶部有一个pragma的.h文件)和我的C#应用程序(作为链接):
#if _NET public #endif enum ETestData { First,Second };
我知道它听起来很乱,但它的工作原理:)
但是……我怎么能用字符串常量做同样的事情 – 我最初认为平台之间的语法太不同了,但也许有办法呢?
使用涉及#if _NET,#define等的巧妙语法?
使用资源文件?
使用C/C++LI库?
有任何想法吗?
解决方法
叫我好笑,但我认为最好的方法是使用C/C++LI和C.
这使得#include相同的字符串成两个不同的上下文,让编译器发挥魔力.
这将为您提供字符串数组
// 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;