小编rpt*_*ony的帖子

Delphi PChar到C++ const char*

我试图使用本机程序中的C++ DLL.我按照这里解释的虚拟方法场景

让我们说我的C++函数签名就是这种形式

int Setup(const char* szIp, const char* szPort);
Run Code Online (Sandbox Code Playgroud)

相应的delphi签名是

function Setup(ip, port: PChar):Integer: virtual; cdecl; abstract;
Run Code Online (Sandbox Code Playgroud)

从delphi程序的某个地方我可以打电话

pObj.Setup('192.168.1.100', '97777');
Run Code Online (Sandbox Code Playgroud)

控件进入dll,但szIp和szPort形式参数只接收我从delphi程序传递的ip和port的第一个字符.

我知道它与null在delphi中正确终止字符串有关.所以我也试过以下.

var
  pzIp, pzPort: PChar;
  szIp, szPort: string; 

begin
   szIp   := '192.168.1.2';
   szPort := '9777';
   //initilize memory for pchar vars
   GetMem(pzIp, Length(szIp)+1);
   GetMem(pzPort, Length(szPort)+1);
   //null terminate the strings
   pzIp[Length(szIp)+1] := #0;
   pzPort[Length(szPort)+1] := #0;
   //copy strings to pchar
   StrPCopy(pzIp, szIp);
   StrPCopy(pzPort, szPort);
end.
Run Code Online (Sandbox Code Playgroud)

这也是一种工作方式.当我Writeln pzIppzPort我得到奇怪的结果.

忘了说,来自C++ dll的所有成员函数都是__stdcall正确编译和导出的

c++ delphi dll

7
推荐指数
1
解决办法
8294
查看次数

如何在VS版本中制作一致的dll二进制文件?

例如,winsock libs在所有版本的visual studio中都能很好地工作.但是我在为所有版本提供一致的二进制文件时遇到了麻烦.使用VS 2005编译的dll在链接到2008年编写的应用程序时将无法工作.我将2k5和2k8升级到SP1,但结果没有太大变化.它的工作原理还可以.但是当它们将它包含在C#应用程序中时,C#应用程序会出现访问冲突错误,但使用经典的C++应用程序时,它可以正常工作.

当我提供dll时,我应该知道一个策略吗?

.net c++ dll

6
推荐指数
2
解决办法
2472
查看次数

TSVNCache.exe正在升级我的Mac

我在VMWare分区中运行Windows.有时,TSVNCache.exe进程开始做一些奇怪的事情(好像它做了无限循环的I/O操作).突然间,我的整个VMWare会话开始变慢.我的mac严重升温.从某种意义上来说,它的表现非常火爆.

我的问题是这个TSVNCache进程到底是什么?,似乎我可以在没有它的情况下在SVN存储库上做几乎所有事情.

svn tortoisesvn tsvncache

2
推荐指数
1
解决办法
483
查看次数

从C++ DLL回调到delphi应用程序

应用程序是用delphi 2010编写的,底层的dll是C++ DLL.

在理想情况下,当您的应用程序使用C++时; 当事件发生时,dll会对应用程序进行回调.回调是通过接口实现的.应用程序开发人员实现抽象c ++类并将对象传递给dll.然后,dll将回调您实现的类的成员函数.它是一种经典的回调模式.

但是如何将delphi对象传递给dll以使其进行回调.

c++ delphi dll

0
推荐指数
1
解决办法
1578
查看次数

标签 统计

c++ ×3

dll ×3

delphi ×2

.net ×1

svn ×1

tortoisesvn ×1

tsvncache ×1