我有一个DLL,其中我有一个返回pchar的函数.(为了避免使用borlndmm)我最初做的是将字符串作为pchar转换并返回
Result := pChar(SomeFuncThatReturnsString)
Run Code Online (Sandbox Code Playgroud)
但是我90%的时间都得到了预期的结果,而其他时候我什么都没回来.
然后我开始认为我需要为pchar分配内存,并且我原来的方式就是拥有一个pchar指向内存,这并不总是在最初调用该函数时的内容.所以我现在有这个
Result := StrAlloc(128);
Strcopy(Result,PAnsiChar(Hash(Hash(Code,1,128),2,128)));
Run Code Online (Sandbox Code Playgroud)
但这让我不得不清理程序端的已分配内存
StrDispose(Pstr);
Run Code Online (Sandbox Code Playgroud)
所以64美元的问题是:从DLL中的函数返回PChar时我是否必须分配内存,或者我可以将其转换为PChar?
当使用Delphi,任何版本时,我有时会碰到插入键并打开覆盖模式.这通常是一个很大的麻烦,您进入覆盖模式的唯一指示是编辑器底部的小文本.
使用其他程序时(首先要记住的是Notepad ++)当你处于插入模式时,文本光标是|
,当你处于覆盖模式时,光标变为_
在覆盖模式下,是否有某个选项或某种方法让Delphi使用不同的文本光标?
一位同事和我本人正在就哪种方式减轻系统资源负担进行辩论.(注意:这不是我想要答案的问题.相反,标题和粗体下面的行是我寻求答案的问题.)
Run Code Online (Sandbox Code Playgroud)1. Using KeyPreview to get the keypresses on a form.
要么
Run Code Online (Sandbox Code Playgroud)2. Using defining an OnMessage procedure and handling it there.
乍一看似乎KeyPreview不会占用系统负担,因为定义OnMessage过程会导致我们的程序检查每条消息.我们不关心的注意消息会导致它被第一个if语句跳出.在最坏的情况下,我们会为每条消息执行if语句.
但我们想知道Delphi如何处理KeyPreview属性......我们想知道Delphi是否在内部定义了自己的OnMessage并查看消息然后触发与keypresses相关的事件.
如果是这种情况,那么两种方法都会大致相同吗?
使用Delphi我想在边框图标按钮上添加另一个按钮; 关闭,最大化,最小化.关于如何做到这一点的任何想法?
所以这只是一个小小的烦恼但是当我启动delphi并开始一个新项目只是为了测试一些东西我希望它是form1,unit1等.但是它在表单2开始新的项目.我该如何解决这个问题?我怀疑为项目找到了默认的保存空间,但我没有.我正在使用delphi 2007和Windows 7.
有没有办法从richedit获取RTF数据而不使用savetostream
strStream := TStringStream.Create('') ;
try
RichEdit.Lines.SaveToStream(strStream);
Text := strStream.DataString;
strStream.CleanupInstance;
finally
strStream.Free
Run Code Online (Sandbox Code Playgroud) 我有一个很大的delphi应用程序,我试图保持低内存占用.
在我的程序中,我使用的是一个组件(Taco)和一个继承自taco的组件(TBurrito).现在只关注类的内存使用情况而不是实际实例,哪种情况使用更多内存?
A.到处使用TBurrito组件
要么
B.使用Taco和TBurrito组件的组合?
我的一个想法是,由于TBurrito继承了Taco,因此Taco类已经存储在内存中,因此使用它不会增加内存的占用空间.
*注意 - 组件名称不是真正的Taco和Burrito.
我听到人们说它不是.
但是,我创建了一个TBitmap并清除了整个区域
For I := 1 to bmp.Width do
For J := 0 to bmp.Height do
bmp.canvas.Pixels[I,J]:= $00000000;
Run Code Online (Sandbox Code Playgroud)
然后我将抗锯齿文本绘制到位图上并将其保存到文件中.在gimp中打开它时会显示透明度信息.
有没有人对此有明确的答案,如果它确实有效,那么有关它如何工作的更多信息?我试过玩最后一个字节,当我在gimp中打开它时,我没有得到预期的结果.
我一直在努力在Delphi中创建soap服务器然后运行并通过IIS在我的localmachine上托管它们.
我有一个godaddy帐户是linux托管,我很好奇,如果我能够在这个托管上使用Delphi创建的Soap服务器?
我正在使用BeginThread创建一个线程.
在我用来启动线程的过程中,我想传递一个指向boolean变量的指针,这样分叉线程和主线程都可以作为控制变量访问它,以便在另一个完成时告诉它.
由于开始线程接受了我试图在Addr(MyPointerVar)中传递的参数的指针,但我收到错误.
但我必须这样跑,所以我今晚无法完成我的想法.但如果有人对此有任何想法我很感激.
所以我在Delphi 2007工作,我正在清理我的代码.我注意到在很多程序中我声明了许多相同类型的不同变量.
例如我现在正在查看的一个程序我声明了4个不同的字符串列表,我必须var1 := TStringList.Create
为每个列表输入.
我有想法制作一个程序,它接受一个开放的变量数组,我的4个变量列表,然后创建它们.电话会是这样的
CreateStringLists([var1,var2,var3,var4]);
Run Code Online (Sandbox Code Playgroud)
但据我所知,你不能通过引用传递开放数组,因此不能做我希望的事情.有没有人对此有任何有趣的想法?
delphi delphi-2007 variable-initialization open-array-parameters