问题描述
如题,以下是代码部分[DllImport("ftpdll.dll",EntryPoint="FtpServerDir",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]protectedstaticexternbyte[]FtpServerDir(IntPtrTHandle,byte[]FTPServer,byte[]DirName);///<summary>///获取指定ftp服务器指定目录下的文件信息///</summary>///<paramname="FtpServer"></param>///<paramname="DirName"></param>///<returns></returns>publicstringGetFtpServerDic(byte[]FtpServer,byte[]DirName){byte[]temp=FtpServerDir(IntPtr.Zero,FtpServer,DirName);returntemp.ToString();}
解决方案
解决方案二:
没人碰到过吗?
解决方案三:
protectedstaticexternbyte[]FtpServerDir(IntPtr...托管byte[]有长度信息。而非托管dll返回的指针,c#怎么知道该指针指向内容的长度呢?它能直接封送才奇怪呢。问题在非托管dll的写法:它返回一个指针的方式,不是好的代码(长度不清楚,所有权不清楚)。
解决方案四:
我碰到了,但是我也不会呢,呵呵
解决方案五:
引用2楼gomoku的回复:
protectedstaticexternbyte[]FtpServerDir(IntPtr...托管byte[]有长度信息。而非托管dll返回的指针,c#怎么知道该指针指向内容的长度呢?它能直接封送才奇怪呢。问题在非托管dll的写法:它返回一个指针的方式,不是好的代码(长度不清楚,所有权不清楚)。
说的有道理
时间: 2024-09-19 20:36:44