如何从c#

时间:2017-01-23 12:14:04

标签: c# c++ dll unmanaged

C ++代码

#define NSK_ALGO_CDECL(ret, func, args)     typedef ret (__cdecl *func##_Dll) args; 
func##_Dll func##Addr = NULL; char func##Str[] = #func;

NSK_ALGO_CDECL(eNSK_ALGO_RET,   NSK_ALGO_DataStream,    
(eNSK_ALGO_DATA_TYPE type, NS_INT16 *data, NS_INT dataLength));

我从c#代码调用此函数。

[DllImport(@"C:\\AlgoDll.dll", EntryPoint = "NSK_ALGO_DataStream", CallingConvention =
CallingConvention.Cdecl)]
public  static extern string NSK_ALGO_DataStream(eNSK_ALGO_DATA_TYPE type,short []data,
short dataLength);

函数调用:

short[] att = new short[] { 11, 12, 13 };
NSK_ALGO_SDK.NSK_ALGO_DataStream(NSK_ALGO_SDK.eNSK_ALGO_DATA_TYPE.NSK_ALGO_DATA_TYPE_ATT, 
 att, 1);

以上代码对我不起作用。

以下是错误

  

mscorlib.dll中发生了未处理的“System.ArgumentException”类型异常   附加信息:作为String传入的指针不得位于进程地址空间的底部64K。

ENUM

public enum eNSK_ALGO_DATA_TYPE
    {
        NSK_ALGO_DATA_TYPE_EEG = 6,      
        NSK_ALGO_DATA_TYPE_ATT,                 
        NSK_ALGO_DATA_TYPE_MED,                
        NSK_ALGO_DATA_TYPE_PQ,                  
        NSK_ALGO_DATA_TYPE_BULK_EEG,            
        NSK_ALGO_DATA_TYPE_MAX
    }

0 个答案:

没有答案