delphi调用c++ dll参数char* 的问题

问题描述

delphi调用c++ dll参数char* 的问题

我有一个c作的dll 具体说明如下
1、文件解密接口函数及参数说明:
int stdcall DecodeFile(char* InFile, //要解密的文件

char* Key, //解密的密钥

char* OutFile, //解密后的文件,在解密路径下的同名XML文件

char* Info);

//提示信息函数返回 0 成功,非0失败。
2、动态调用实例:

String jmfile = 要解密的文件路径;

String key = 要解密的文件密钥;
String strDllFile = "DecodeXMLFIle.dll"; //解密动态库文件名

DLLInst = LoadLibrary(strDllFile.c_str());

if( !DLLInst)

Application->MessageBox( "DLL装载错误", "错误信息", MB_ICONERROR); else

{ /l输入函数声明 int (stdcall DecodeFile)(char InFile,

char* Key,

char* OutFile,

char* Info);

DecodeFile = (int (__stdcall )(char InFile,

char* Key,

char* OutFile,

char* Info))GetProcAddress( DLLInst, "DecodeFile");

if (DecodeFile)

{

char outfilestr[1000] = {0};

char msgInfostr[1000] = {0};

int dRes = DecodeFile(jmfile.c_str(),key.c_str(),outfilestr,msgInfostr); if(dRes != 0)

{

String Msgstr = "提示信息:解密失败 "+AnsiString(msgInfostr);
Application->MessageBox(Msgstr, "错误信息", MB_ICONERROR);

}else

Application->MessageBox("成功", "成功", MB_OK);

}

}

FreeLibrary(DLLInst);

如何用delph声明这个函数并调用呢

解决方案

用pchar类型,dll如何声明使用,网上搜搜吧

解决方案二:

解决方案三:

不知道为什么 我用了pchar不行呀
FreeLibrary(dll);
还报内存错

解决方案四:

dllinst是否为正确句柄,不然释放会有问题。

解决方案五:

看下是不是unicode的字符串?用byte是什么?

解决方案六:

function DecodeFile(InFile: PAnsichar;Key: PAnsichar;OutFile: PAnsichar;Info: PAnsichar): integer;stdcall;

解决方案七:

C++的char*一般都是PAnsichar
W_Char*才是双字节PWideChar
另外Pchar在2007之后对应的是PWideChar

解决方案八:

这个有unsign char/char /等等的区别,DES加密解密的使用很多

解决方案九:

char*如果你使用delphi2010前的版本是Pchar,以后的版本用PAnsiChar,因为是Unicode编码

时间: 2024-10-02 18:50:54

delphi调用c++ dll参数char* 的问题的相关文章

c#调用mfc dll 输出char*字符串出现乱码

问题描述 intPTR_GetStatus(intiDeviceld,char*status)//c++原型[DllImport("PTR.dll",CallingConvention=CallingConvention.Cdecl,CharSet=CharSet.Auto)]publicstaticexternintPTR_GetStatus(System.Int16iDeviceId,System.Text.StringBuildera);StringBuilderstr=newS

c#调用C++ DLL,char[]结束符\0

问题描述 C++接口函数int__stdcallPosInterface(INPUT_STRUCT*inputData,OUTPUT_STRUCT*outputData);typedefstruct{chartransType[2+1];chartransAmount[12+1];chartrack2[37+1];}INPUT_STRUCT;typedefstruct{charrspCode[2+1];charrspMsg[40+1];}OUTPUT_STRUCT;在C#调用中如何定义input

delphi-Delphi 调用C++ dll 回调函数

问题描述 Delphi 调用C++ dll 回调函数 用Delphi 调用容联云通信的动态库CCPAppClient.DLL,其中有一个函数 Function CCPinit( CallbackInterface: CCPCALLBACKINTERFACE ):Integer;stdcall; 参数CCPCALLBACKINTERFACE 是一个结构体指针,包含 onConnected , onConnectError 等回调函数. 在调用函数CCPinit调用成功后(返回值0),会触发CCPC

c#-C#调用C DLL(char *传出参数)时,报错参数不匹配

问题描述 C#调用C DLL(char *传出参数)时,报错参数不匹配 public class LLht { //手持机下载上传 [DllImport(""llht.dll"" CallingConvention = CallingConvention.StdCall CharSet = CharSet.Ansi SetLastError = true ExactSpelling = true)] public static extern int llht_dow

c#-C#调用C++ dll的参数转换问题,如何转换char **类型的参数到C#

问题描述 C#调用C++ dll的参数转换问题,如何转换char **类型的参数到C# 这是C++代码 DLL_API int Onvif_Discovery(char** deviceaddress, int* nDevices); 这是C#调用 [DllImport("OnvifDll.dll",EntryPoint="Onvif_Discovery", CharSet=CharSet.Ansi,CallingConvention=CallingConventi

delphi-替换Delphi中调用的dll

问题描述 替换Delphi中调用的dll 在一段Delphi编写的dll中调用了另外一个一个A.dll,现在想将这个A.dll替换为自己写的B.dll.只是知道A大概的功能,B是自己写的,中间需要注意些什么? 解决方案 用depend看下导出表,有什么函数名,函数序数,然后用ollydbg之类的工具调试,看看参数是怎么传的,通过堆栈可以分析出来. 然后自己照着写. 解决方案二: Delphi 调用VC的DLLDelphi调用DLL中的接口Delphi调用DLL中的接口

求教个delphi调用DLL的函数说明怎么写

问题描述 求教个delphi调用DLL的函数说明怎么写 函数名 ZtDevice_CR_ReadTrack3 出口参数 byTrackDataThree BYTE * 3 出口参数 nDataThreeLen INT * 入口参数 nTimeOut INT 返回值 short 我的声明 unction ZtDevice_CR_ReadTrack2(out byTrackDataTwo:pBYTE; out nDataTwoLen:Integer;nTimeOut:integer):integer

java调用delphi写的DLL报错误签名错

问题描述 如题,但并不是每次都报错,只是偶尔.函数参数我只有两个,都是字符串类型:Java这边我定义为string类型,delphi的dll里我定义为widestring类型错误显示为:错误签名AppName:javaw.exeAppVer:6.0.160.1ModName:adsloc32.dllModVer:5.60.0.0Offset:00030b00我写的delphidll里面调用了adsloc32.dll.补充:我用的开发工具是eclipse,delphi3写的DLL. 解决方案 解决

java-Java中利用jawin技术调用第三方dll文件,其中 invoke的参数问题 ,高手请进

问题描述 Java中利用jawin技术调用第三方dll文件,其中 invoke的参数问题 ,高手请进 各位大神: dll中的被调用方法如下: long WINAPI AutoOpenComPort(long* Port, unsigned char *ComAdr, unsigned char Baud,long *FrmHandle); 其中: Port:输出变量, ComAdr:输入/输出变量 Baud:输入变量 FrmHandle:输出变量 请问它的 msgBox.invoke(instr