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
}