Excel DNA-将C#字符串编组到回调中的VBA ByRef

尼古拉斯

我正在尝试使用Excel-DNA从C#代码在Excel中调用VBA回调。在弄乱了特定的数据类型和编组声明之后,我终于可以创建一个工作示例:

C#代码

[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDispatch)]
[ProgId("CSharpComObject")]
public partial class CSharpComObject
{
    Dictionary<string, Callback> _callbackMap = new Dictionary<string, Callback>();


    public void SubscribeStringData(string topic, [MarshalAs(UnmanagedType.FunctionPtr)] Callback callback)
    {
        _callbackMap[topic] = callback;
    }

    public void RaiseCallback(string topic, string data)
    {
        _callbackMap[topic](data);
    }

    public delegate void Callback([MarshalAs(UnmanagedType.BStr)] string data);
}

VBA模块

Option Explicit

Dim testObj As Object



Sub Subscribe()

Set testObj = CreateObject("CSharpComObject")

testObj.SubscribeStringData "someTopic", AddressOf StringDataCallback

End Sub



Sub StringDataCallback(ByVal data As String)

MsgBox "StringDataCallback Raised [" + data + "]"

End Sub

问题

从上面的代码示例中可以看到,字符串的默认COM编组为BStraka ByVal ... As String

我想知道是否存在一种将字符串数据(或与此相关的任何对象类型)传递给VBA回调的方法ByRef,如果是这样,那么C#声明和编组属性将是什么?

Govert

指定参数ref string应该可以正常工作。

有关字符串封送处理选项的更多信息,请参见https://msdn.microsoft.com/zh-cn/library/s9ts558h(v=vs.110).aspx

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章