问题描述
C++代码:BOOL__stdcallHik_PlayM4_OpenFile(LONGnPort,LPSTRsFileName);C#:[DllImport("HikPlayM4.dll",CallingConvention=CallingConvention.StdCall)]//publicexternstaticboolHik_PlayM4_OpenFile(longnPort,[MarshalAs(UnmanagedType.LPStr)]stringsFileName);publicexternstaticboolHik_PlayM4_OpenFile(longnPort,stringsFileName);定义一个sting变量:stringPath="C:\aa.txt"调用Hik_PlayM4_OpenFile函数报:托管的PInvoke签名与非托管的目标签名不匹配请大家帮我看看,thx
解决方案
解决方案二:
BOOL__stdcallHik_PlayM4_OpenFile(LONGnPort,LPSTRsFileName);改为extern"C"BOOL__stdcallHik_PlayM4_OpenFile(LONGnPort,LPSTRsFileName);
解决方案三:
1楼:不能修改C++代码,DLL不是我写的,是调用别人的。thx
解决方案四:
你需要用depends看看那个dll的导出函数的签名是什么
解决方案五:
那你指定入口函数为"?Hik_PlayM4_Openile@@YGHJPAD@Z"
解决方案六:
这样声明[DllImport("HikPlayM4.dll",CallingConvention=CallingConvention.StdCall,EntryPoint="?Hik_PlayM4_Openile@@YGHJPAD@Z",CharSet=CharSet.Ansi)]publicexternstaticboolHik_PlayM4_OpenFile(longnPort,stringsFileName);
解决方案七:
呵呵!看来C++下的函数名编译变换,c#下的人还是不明白啊!akirya说得对!不过我觉得publicexternstaticbool怎么这么别扭啊,我每次都是写成privatestaticexternbool