调用Delphi Dll 出现无法封送处理return value错误

问题描述

如题,以下是代码部分[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

调用Delphi Dll 出现无法封送处理return value错误的相关文章

C#调用C++提示 无法封送处理“return value”: 无效的托管/非托管类型组合。

问题描述 各位大家好.我在处理C#调用C++dll的提示遇到这个问题还请大家指点一二.谢谢无法封送处理"returnvalue":无效的托管/非托管类型组合.引发异常的源码是C#[DllImport("CDLL.dll",EntryPoint="EncData")]privatestaticexternchar[]EncData(char[]_in,char[]key);staticvoidMain(string[]args){try{byte[

dll窗体及数据调用-delphi DLL数据及窗体调用

问题描述 delphi DLL数据及窗体调用 DLL工程文件代码: library DLLUSERS; uses Windows, ADODB, Dialogs, Forms, SysUtils, Classes, U_DataModule in 'U_DataModule.pas' {DataModule1: TDataModule}, U_Users in 'U_Users.pas' {Frm_Users}, U_Initialize in 'U_Initialize.pas'; {$R *

C# 创建activex控件,调用其他dll过程中,提示安全透明方法错误 ,急,急,急……

问题描述 我使用VS2010平台,C#语言开发一个控件LemonyVedioOcx,这个控件用于网页中的调用.该控件在开发过程中,需要调用另一个DLL叫ManagedLayer.dll,但是,在调用ManagedLayer.dll时,系统报错,报错内容如下:---------------------------用户控件测试容器---------------------------未能创建UserControl"LemonyVedioOcx.VedioOcx"错误信息是"安全透

vb.net-Vb.net 调用C++ dll遇到的问题

问题描述 Vb.net 调用C++ dll遇到的问题 头文件里的方法时这样的 /**@brief 创建一个会议实例,每次调用都会获得一个新的会议实例 *@param[in] nCompentSet 需要加载的组件,参考定义 *CONF_PARAM_COMPONENT_AS = 0x001L, *CONF_PARAM_COMPONENT_DS = 0x002L, *CONF_PARAM_COMPONENT_PL = 0x004L, *CONF_PARAM_COMPONENT_CB = 0x008L

C#调用c++ dll 封送结构体数组,无法成功

问题描述 C#调用c++ dll 封送结构体数组,无法成功 c++代码: class qf { private: char *id; char *mc; float sd; int LX; }; 函数:int EntryPoint(qf *qfw); c#代码: public class qf { private string id; private string mc; private float sd; private int LX; }; c#调用: qf[] qfw = new qf[2

C#调用COM组件时的结构类型数据封送问题,报PInvoke 签名错误

问题描述 Com的idl[id(4),helpstring("methodStructureTest")]HRESULTStructureTest(MyPointa);结构申明typedefstructPoint{intx;inty;}MyPoint;C#中结构包装,函数包装[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Ansi)]publicstructPoint{[MarshalAs(UnmanagedType.I4)]pu

com-C++ 如何调用Delphi的dll文件中的COM方法

问题描述 C++ 如何调用Delphi的dll文件中的COM方法 请问 C++ 如何 调用 Delphi 的dll文件中的COM方法 解决方案 只要是COM就遵守COM的规范,Delphi写出来的COM和其他语言写出来的COM用法是一样的

delphi-求救!!! 调用一个DLL文件的函数,提供的调用方法好像是Delphi,VB怎么调用!

问题描述 求救!!! 调用一个DLL文件的函数,提供的调用方法好像是Delphi,VB怎么调用! 提供的调用方法如下 3.2 封装模式 接口动态库的文件名为nxmi.dll,HIS直接调用nxmi.dll, 调用之前请先安装读卡环境,安装程序为inst.exe. 3.3 调用方法 对外提供的接口函数: Procedure invoke(params :PChar; result : PChar) ; 我现在在VB中写的如下: 在模块下定义 Public Declare Function invo

asp.net webservice调用Delphi的dll

问题描述 asp.net webservice调用Delphi的dll asp.net webservice调用Delphi的dll,执行方法Init(连接Oracle数据库),报错连接超时. 建立个winform程序,调用Init函数可通过,但webservice就是不行. 我是发布在服务器server 2003 32位, IIS发布,发程序发布的文件扔到IIS根目录,dll文件在bin目录下. 调用的这个dll文件又调用了另一个dll,2个dll文件都扔到bin目录下了.不知道是什么原因,w