小编Gu.*_*u. 的帖子

在dll中传输基本程序中的过程名称并在那里执行它

程序使用的程序和dll(都是在Delphi上编写的,代码都可以访问).在程序中有一个程序X,它根据来自dll的程序Y的询问推断出一些统计数据(在计时器上).过程Y在dll中发生某些事件时变得更加活跃,这可能在不同的时间间隔内出现.

问题:是否可以在dll中传输名称程序X,并在程序Y中执行它,以便立即了解发生的事件,而不是在计时器上查询它.再次(或作为变体):如何在程序中定义,dll中有什么事件并执行过程X的代码?如果有可能,那就是一个代码示例.

delphi dll

4
推荐指数
1
解决办法
148
查看次数

如何定义,DEP在系统中是ON

DelphiXe; XP,VISTA,Win7的,WSrv2008R2;

在此输入图像描述

支持0.DEP(数据执行保护)CPU

Function isCpuDEP:bool; 
begin
Result:=... //???
end;
Run Code Online (Sandbox Code Playgroud)

1.如何定义,DEP在系统中是ON?

Function isEnableDEP:bool; // Win Xp comparable
begin
Result:=false;if isCpuDEP=false then exit;
Result:=... //???
end;
Run Code Online (Sandbox Code Playgroud)

2.定义,如果DEP已启用,并且还启用了所有程序和服务?

Function isEnableDEPForAllProgram:bool;
begin
Result:=false;if isEnableDEP=false then exit;
Result:=... //???
end;
Run Code Online (Sandbox Code Playgroud)

3.获取DEP程序列表?

Function GetDEPProgramList:TStringList;
begin
Result:=nil;if isEnableDEPForAllProgram=false then exit;
Result:=Tstringlist.Create;
Result:=... //???
end;
Run Code Online (Sandbox Code Playgroud)

delphi dep

4
推荐指数
3
解决办法
1979
查看次数

如何从DLL导出重载函数?

德尔福Xe.

在模块Windows.pas中,我看到一种方法:

function InterlockedExchangeAdd(Addend: PLongint; Value: Longint): Longint stdcall; overload;
{$EXTERNALSYM InterlockedExchangeAdd}
function InterlockedExchangeAdd(var Addend: Longint; Value: Longint): Longint stdcall; overload;
{$EXTERNALSYM InterlockedExchangeAdd}
...
function InterlockedExchangeAdd(Addend: PLongint; Value: Longint): Longint; external kernel32 name 'InterlockedExchangeAdd';
function InterlockedExchangeAdd(var Addend: Longint; Value: Longint): Longint; external kernel32 name 'InterlockedExchangeAdd';
Run Code Online (Sandbox Code Playgroud)

意味着,DLL可以导出具有相同名称的函数.

我试着重复一遍:

我创建了这个项目

Program TestMyDll;

{$APPTYPE CONSOLE}

uses SimpleShareMem, SysUtils;

Function MyFunc(const X:Integer):string; StdCall; External 'MyDll.dll' Name 'MyFunc'; Overload;
Function MyFunc(const X:Extended):string; StdCall; External 'MyDll.dll' Name 'MyFunc'; Overload;

begin
  try
  Writeln;
  Writeln('MyDll test');
  Writeln('Int: ' …
Run Code Online (Sandbox Code Playgroud)

delphi dll overloading

4
推荐指数
2
解决办法
6074
查看次数

如何在Delphi Xe2中使用新类型的字符串?

请注意,sarnold对此问题进行了大量编辑; 原始问题完整地作为评论保留在问题中.如果我做了一些不清楚的事情,也许原来的帖子会有所帮助.(我将其留作评论,因此未来的编辑不需要总是参考问题编辑历史.)

我正在使用Delphi Xe2,需要帮助理解如何正确使用ANSI字符串,Unicode字符串和宽字符串,特别是在编写用于其他语言的DLL(例如VB,C++或C#)时.

我需要使用Delphi Xe2编写DLL来对Unicode字符串执行简单的字符串操作.此DLL需要与一个SimpleShareMemShareMem多个内存管理器一起工作.此DLL需要可以从外部语言(如VB,C++和C#)调用.

默认情况下,字符串现在应该是Unicode字符串.我们应该使用Embarcadero来处理这些字符串吗?

字符串是:(a)不支持Unicode的单字节字符或(b)宽字符串,其中每个字符需要两个字节.(这些支持Unicode,但它们不是UTF-8字符串.)

有两种指针类型可用:PAnsiCharPWideChar(没有PUnicodeChar指针可用).PChar是别名 PWideChar- 这是否意味着我们总是需要2 * length 为这些字符串分配内存量?(同样,我们需要将内存除以2得到这些字符串的长度吗?)

对于字符串常量,我们是否需要在源代码中标记字符串的类型?例如:

Const MyCo = 'test';
Run Code Online (Sandbox Code Playgroud)

要么

Const MyCo = WideString('test');
Run Code Online (Sandbox Code Playgroud)

当我们在字符串变量之间执行赋值时怎么样?

s := st;
Run Code Online (Sandbox Code Playgroud)

这应该重写:

s := WideString(st);
Run Code Online (Sandbox Code Playgroud)

我们应该在字符串中包含Unicode字节顺序标记吗?我们应该如何在字符串中包含BOM?

我们应该如何使用不同Windows代码页中的ANSI字符串?如果我们收到代码页为1200的ANSI字符串,我们应该重新编码字符串还是按原样使用它?

我们应该如何使用TEncoding类在Unicode,UTF-8,WideString和AnsiString类之间进行转换?

使用宽字符串或Unicode字符串是否有严重的性能损失?

在使用通用内存管理器时,我们是否应该编写接口以仅需要使用WideString变体?

如果我们写的接口需要长度参数PChar, PAnsiChar以及PWideChar参数类型?

如何编写我们的接口来确定文件是以Unicode,UTF-8,ANSI还是宽字符存储?我们应该如何确定将文件写回时使用的格式?

我们应该只使用程序吗?或者功能也可以吗?

谢谢,新年快乐.

delphi string dll

4
推荐指数
1
解决办法
6083
查看次数

有没有办法在Windows 7中的Windows资源管理器中更改项目的文本背景颜色?

http://screenshots.en.sftcdn.net/en/scrn/39000/39972/xentient-labels-1.jpg

是否可以像Xentient Labels应用程序一样更改Windows资源管理器中项目的背景颜色?是否可以从Windows 7中的Delphi XE2执行此操作?

delphi winapi windows-explorer windows-7 delphi-xe2

4
推荐指数
1
解决办法
1448
查看次数

TOpenDialog - zip文件

如何在打开和保存对话框中强制将zip存档显示为文件,而不是文件夹?

显示为文件夹我的意思是这样的:

在此输入图像描述

delphi windows-7 delphi-xe

3
推荐指数
1
解决办法
376
查看次数

重置GetLastError值

德尔福Xe.

在delphi中帮助:"...调用此函数通常会重置操作系统错误状态......"

如何在0上重置当前错误?即GetLastError = 0

例:

Try
// There is an error
except
showmessage(inttostr(getlasterror)); // Ok, getlasterror<>0
end;
....
// no errors
....
// How to reset a current error on 0?
showmessage(inttostr(getlasterror)); // Again will be <> 0
Run Code Online (Sandbox Code Playgroud)

delphi winapi

3
推荐指数
2
解决办法
3065
查看次数

Delphi Xe2 VCL风格和webbrowser

Win7 x64,Delphi Xe2 update2

提示:

  1. 编译为x32的新项目在项目选项中应用了visual(vcl)样式,默认情况下选择一个
  2. 在窗体上的button1和WebBrowser1
  3. 在按钮中我们编写WebBrowser1.Navigate('http://google.com');
  4. 我们开始,我们按下按钮 - 在浏览器中我们看到一个网站google.com,所有ок

我们编译为x64,它启动ок,按下按钮我们收到错误"在zerro浮动分区".

问题:

  1. 完全如此(错误)?和它一样奋斗?(在x64模式下)
  2. 如何将视觉样式应用于滚动WebBrowser1的条带?(在x32模式下):(本机组件不能皮肤,但AlphaControls皮肤系统 - 工作正常,webbrowser滚动线皮肤正常

ps update3还没有放

pss bad english:on

delphi delphi-xe2 vcl-styles

3
推荐指数
1
解决办法
1424
查看次数

学习资源数量

Delphi Xe,Win7x64

要请求具有已知编号的字符串资源:

Function GuGetStrRes(Fn:string;Nom:integer):string;
var 
  h:THandle;
  buffer:array [0..255] of Char;
begin
  Result:='';
  if fileexists(Fn)=false then 
    exit;
  Try
    h:=LoadLibraryEx(pchar(Fn),0,LOAD_LIBRARY_AS_DATAFILE);
    if h=0 then 
      exit;
    if LoadString(h, Nom, buffer, SizeOf(buffer)) > 0 then 
      Result:=string(buffer);
    FreeLibrary(h);
  Except
    Try 
      if h<>0 then 
        FreeLibrary(h);
    except 

    end;
  End;
End;

// Use
Showmessage(GuGetStrRes('c:\windows\system32\shell32.dll',4200));
Run Code Online (Sandbox Code Playgroud)

问题:如何在DLL中学习所有"字符串"资源?例如,要接收一个数组:11,22,23,24,40000等等(它们可以不是一个接一个)

试过这样:

...
var 
  dllname, str:string;
begin
  dllname: ='c:\windows\system32\shell32.dll'; 
  str: = ";
  For i: = 0 to 10000 do 
  begin
    str: = GuGetStrRes (dllname, i);
    if str <> " then 
      memo1.lines.add (inttostr …
Run Code Online (Sandbox Code Playgroud)

delphi

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

如何在Delphi中连接(导入)WinApi函数

德尔福Xe4.例如,有两个函数(Unicode):

CryptAcquireContext,CryptGetProvParam.

我在MSDN上阅读说明:

1)http://msdn.microsoft.com/en-us/library/windows/desktop/aa379886(v=vs.85 ) .aspx

BOOL WINAPI CryptAcquireContext(
  _Out_  HCRYPTPROV *phProv,
  _In_   LPCTSTR pszContainer,
  _In_   LPCTSTR pszProvider,
  _In_   DWORD dwProvType,
  _In_   DWORD dwFlags);
Run Code Online (Sandbox Code Playgroud)

2)http://msdn.microsoft.com/en-us/library/windows/desktop/aa379929(v=vs.85 ) .aspx

BOOL WINAPI CryptEnumProviders(
  _In_     DWORD dwIndex,
  _In_     DWORD *pdwReserved,
  _In_     DWORD dwFlags,
  _Out_    DWORD *pdwProvType,
  _Out_    LPTSTR pszProvName,
  _Inout_  DWORD *pcbProvName);
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,那么翻译成Delphi应该是这样的:

    {S} Function CryptAcquireContext(Out hpProv:PNativeUInt;Const Container:PWideChar;
Const Provider:PWideChar;Const ProvType:DWord;Const Flags:DWord):Bool; StdCall; External Advapi32dll Name 'CryptAcquireContextW';

    {S} Function CryptEnumProviders(Const Index:DWord;Const Reserved:PDWord;Const Flags:DWord;
Out ProvType:PDWord;Out pszProvName:DWord;Var pcbProvName:DWord):Bool; StdCall; External Advapi32dll Name 'CryptEnumProvidersW'; …
Run Code Online (Sandbox Code Playgroud)

delphi winapi delphi-xe4

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