将枚举作为参数从C#传递到C / C ++

时间:2017-06-27 20:19:09

标签: c# c++ enums interop marshalling

我在下面定义了一个C / C ++ DLL:

[DllImport("libctmclient-0.dll", EntryPoint = "ctm_download_cm_data", CallingConvention = CallingConvention.Cdecl)]
public static extern CTMDownloadCMDataResult DownloadCMData([MarshalAs(UnmanagedType.LPStr)] string cmTransactionId, CTMCMOperationType cmType);

public enum CTMCMOperationType
{
    CTM_CM_NONE = 0,
    CTM_CM_LOAN,
    CTM_CM_PICKUP,
    CTM_CM_BALANCE
};

我在下面定义了我的C#应用​​程序:

CTMCMOperationType cmType = CTMCMOperationType.CTM_CM_LOAN;
string cmTransactionId = "123456789";
CTMDownloadCMDataResult result = DownloadCMData(cmTransactionId, cmType);

尝试调用DownloadCMData,如下所示:

session.openOdb(name='cube.odb').rootAssembly.instances['PART-1-1'].elementSets['CUBE-1_CUBE'].elements[el_numerator].connectivity[nod_numerator]

但结果是MarshalDirectiveException。 方法的类型签名不与PInvoke兼容。

我非常确定字符串参数是否有效,但这是我第一次传递枚举,所以我很可能将其指向问题。

我猜你不能直接将管理代码(如C#)中的枚举传递给非托管代码(如C / C ++)。

我需要做什么或做什么我需要使用整数/长?

1 个答案:

答案 0 :(得分:0)

它可能是您返回的结构的问题 类似here的东西。