Существует экспортированная функция get_pv_wrapper(), которая принимает символ* и возвращает сложную структуру :
Код: Выделить всё
Value* reply = get_pv_wrapper("TEST:Model_RBV");
Код: Выделить всё
replyКод: Выделить всё
// Value - Generic data container. Structure changes based on input type
Value object:
struct "epics:nt/NTScalar:1.0" {
string value = "SoftIOC"
struct "alarm_t" {
int32_t severity = 0
int32_t status = 2
string message = "UDF"
} alarm
struct {
string description = ""
string units = ""
struct "enum_t" {
int32_t index = 0
string[] choices = {7}["Default", "String", "Binary", "Decimal", "Hex", "Exponential", "Engineering"]
} form
} display
}
Кто-нибудь знает, как я могу прочитать этот объект (используя C#), ничего не меняя в DLL?
Кроме того, я рассматриваю возможность написания оболочки C++ , но поскольку класс Value использует общий шаблон, возможно, этого не стоит делать.
Что я пробовал до сих пор:
- Я создал пример приложения C# для чтения объекта C++ с помощью P/Invoke. Он работает только с типами C.
- Я написал собственный маршал C#, но он работает только с char*.
- Я написал программа CLR, но она несовместима с .NET7 (работает только с .NET7-windows7).
Подробнее здесь: https://stackoverflow.com/questions/788 ... tring-in-c