标签: marshalling

HRESULT,DWORD和HANDLE在非托管代码中的含义是什么?

我正在读关于Marshaling的事.我很困惑,因为在非托管代码中这意味着什么.HRESULT,DWORD和HANDLE.原文是:

您已经知道托管和非托管环境之间没有这种兼容性.换句话说,.NET不包含存在于非托管代码领域中的类型HRESULT,DWORD和HANDLE.因此,您需要找到.NET替代品或根据需要创建自己的替代品.这就是所谓的编组.

c# clr unmanaged language-interoperability marshalling

-1
推荐指数
1
解决办法
2548
查看次数

C到C#数组编组中的矛盾行为

我有两个几乎相同代码的例子.我可以从C#中检索一个数据,但我没有为另一个人提供正确的数据.他们来了:

效果很好

C++部分:

__declspec(dllexport) void** enumerateDevices(int *dIsize){
    Array<DeviceInfo> dIArray;
    Framewoek::enumerateDevices(&dIArray);
    *dIsize = dIArray.getSize();
    DeviceInfo dP[255];
    for (int i = 0; i < dIArray.getSize(); i++)
        dP[i] = dIArray[i];
    void* p = dP;
    return &p;
}
Run Code Online (Sandbox Code Playgroud)

C#部分:

    [DllImport("Wrapper.dll")]
    static extern IntPtr enumerateDevices(out int devicesSize);
    public static DeviceInfo[] EnumerateDevices()
    {
        int devicesSize;
        IntPtr arrayPointer = enumerateDevices(out devicesSize);
        IntPtr[] array = new IntPtr[devicesSize];
        Marshal.Copy(arrayPointer, array, 0, devicesSize);
        DeviceInfo[] arrayObjects = new DeviceInfo[devicesSize];
        for (int i = 0; i < devicesSize; i++)
            arrayObjects[i] = new …
Run Code Online (Sandbox Code Playgroud)

c# c++ pinvoke marshalling

-1
推荐指数
1
解决办法
290
查看次数

将引用类型对象数组从 C# 编组到 C++

我能够通过装饰它成功地将引用类型对象从 C# 传递到 C++StructLayout(LayoutKind.Sequential)

C# 中的类:

StructLayout(LayoutKind.Sequential)
public class Point
{
        [DataMember]
        public double X { get; set; }
        [DataMember]
        public double Y { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

C++ 中的等价物:

struct Point
{
public:
    double x;
    double y;
};
Run Code Online (Sandbox Code Playgroud)

C++中的函数体:

extern "C" __declspec(dllexport) void Translate(Point* pt, double dx, double dy)
{
    pt->x += dx;
    pt->y += dy;
}
Run Code Online (Sandbox Code Playgroud)

以及 C# 中的等效项:

[DllImport("myDll.dll", CallingConvention = CallingConvention.Cdecl)]
public extern static void Translate(Point pt, double dx, double dy); 
Run Code Online (Sandbox Code Playgroud)

到目前为止我没有遇到任何问题,当我在接下来的两个函数之间传递这些点的数组时,问题就会发生:

extern "C" __declspec(dllexport) …
Run Code Online (Sandbox Code Playgroud)

c# c++ arrays pinvoke marshalling

-1
推荐指数
1
解决办法
2866
查看次数

使用Go的json.Marshal和json.MarshalIndent有什么区别?

我想以JSON格式获取CF命令的输出,但是我不确定该使用json.Marshal还是json.MarshalIndent

我需要的输出是这样的:

{
    "key1": "value1",
     ....
    "keyn": "valuen",
}
Run Code Online (Sandbox Code Playgroud)

这是旧示例,但不是所需的输出:

cmd.ui.Say(terminal.EntityNameColor(T("User-Provided:")))   
  for _, key := range keys {        
         // cmd.ui.Say("%s: %v", key, envVars[key])
         here needed a new one with json.marshalIdent
 }
Run Code Online (Sandbox Code Playgroud)

我从来没有使用过go,所以我真的不知道该使用哪个以及如何使用。

json marshalling go

-2
推荐指数
1
解决办法
3135
查看次数

如何将一个[]字节解组成一个json结构,该结构作为一个值存储在一个string类型的变量中?

注意:myjsonstruct是从数据库中存储和读取的.硬编码为清晰起见

myjsonstruct := `{"fldA":"", "fldB":"", "fldC":""}`

targetJsonString := `{"fldA":"valueA","fldB":"valueB","fldC":"valueC","fldOther":"valueOther"}`
Run Code Online (Sandbox Code Playgroud)

现在,我想解组targetJsonStringmyjsonstruct的,这样相应的字段中myjsonstruct填入搞定.

请注意:myjsonstruct是一个"字符串",无法在代码中编程.我在编码时不知道这个结构.它将在运行时读取为字符串,可能来自数据库.

谢谢!

marshalling go unmarshalling

-2
推荐指数
1
解决办法
72
查看次数

如果某些值的“字段/键”不同或未知,在定义 JSON 数据的结构时应该使用什么 Go 标记?

在尝试解析时间序列数据时,我发现 JSON 数据中的一个关键字段是时间戳(显然是字符串格式)。但是事先为相同的结构创建一个结构是不可能的,因为无论如何我都不知道时间戳字符串。

这是 JSON 的样子:

"Time Series (5min)": {
        "2020-01-17 16:00:00": {
            "1. open": "167.2000",
            "2. high": "167.3400",
            "3. low": "167.0100",
            "4. close": "167.0500",
            "5. volume": "1646699"
        },
        "2020-01-17 15:55:00": {
            "1. open": "166.9000",
            "2. high": "167.1600",
            "3. low": "166.8500",
            "4. close": "167.1500",
            "5. volume": "622999"
        },
        "2020-01-17 15:50:00": {
            "1. open": "166.7241",
            "2. high": "166.9200",
            "3. low": "166.7200",
            "4. close": "166.8999",
            "5. volume": "271723"
        }
    }
Run Code Online (Sandbox Code Playgroud)

有些人的结构可能如下所示:


type TIMESTAMP struct {
    Open   string `json:"1. open"`
    High   string `json:"2. …
Run Code Online (Sandbox Code Playgroud)

json struct marshalling go unmarshalling

-2
推荐指数
1
解决办法
42
查看次数

为什么Go和Rust序列化结果不一致?

我想要的结果如下\xef\xbc\x8c,但Rust的结果是另一个。

\n
 [123 34 66 111 100 121 34 58 34 97 71 86 115 98 71 56 61 34 125]\n
Run Code Online (Sandbox Code Playgroud)\n

戈兰样本:

\n
type Response struct {\n    Body    []byte\n}\nfunc Test_Marshal(t *testing.T)  {\n    body := "hello"\n    resp := &Response{\n        Body:[]byte(body),\n    }\n    t.Log("resp:", resp)\n    result, _ := json.Marshal(resp)\n    t.Log("result: ", result)\n}\n
Run Code Online (Sandbox Code Playgroud)\n

去结果:

\n
    aa_test.go:17: resp: &{[104 101 108 108 111]}\n    aa_test.go:19: result:  [123 34 66 111 100 121 34 58 34 97 71 86 115 98 71 56 61 34 …
Run Code Online (Sandbox Code Playgroud)

marshalling go rust serde-json

-2
推荐指数
1
解决办法
436
查看次数