小编Joh*_*wis的帖子

从 lib 中提取所有 obj 文件

如何从 .lib 文件中提取所有 .obj 文件?我发现的唯一方法是一次提取一个。有没有办法让它自动化?

LIB.EXE /EXTRACT:member.obj Library.LIB 
Run Code Online (Sandbox Code Playgroud)

visual-c++ visual-studio-2013

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

如何在x64中使用StackAlloc?

我试图使用StackAllocGraphics32在DelphiXE7的X64但它与erorr崩溃.我尝试添加NOFRAME代码,但也没有帮助.

First chance exception at $000000000013FF10. Exception class $C0000005 with message 'c0000005 ACCESS_VIOLATION'. Process Stack.exe (4536)

program Stack;

{$APPTYPE CONSOLE}

uses
  System.SysUtils,
  System.Classes;

function StackAlloc(Size: Integer): Pointer; register;
asm
{$IFDEF CPUX86}
        POP       ECX          // return address
        MOV       EDX, ESP
        ADD       EAX, 3
        AND       EAX, not 3   // round up to keep ESP dword aligned
        CMP       EAX, 4092
        JLE       @@2
@@1:
        SUB       ESP, 4092
        PUSH      EAX          // make sure we touch guard page, …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe7

5
推荐指数
1
解决办法
432
查看次数

如何在接口中找到方法的索引?

如何找到在接口中定义的过程/函数的索引?可以用RTTI来完成吗?

delphi delphi-xe7

5
推荐指数
1
解决办法
373
查看次数

在 Delphi 中使用 C++ 类

如何在 Delphi 中使用 C++ 类?我试图通过抽象类使用它。然而它并没有按预期工作,我从 中得到了奇怪的数字Age();

德尔福:

program Test;

{$APPTYPE CONSOLE}

type
  IPerson = class
    function Age(): Integer; overload; virtual; stdcall; abstract;
    procedure Age(const Value: Integer); overload; virtual; stdcall; abstract;
  end;

const
  DLL = 'Interface.DLL';

procedure FreePerson(const Person: IPerson); external DLL;
function CreatePerson(): IPerson; external DLL;

var
  Person: IPerson;
  I: Integer;
begin
  Person := CreatePerson;
  Person.Age(10);
  I := Person.Age(); // I is not 10?

end.
Run Code Online (Sandbox Code Playgroud)

C++:

extern "C" class _declspec(dllexport) IPerson
{
    virtual void Age(const int Value) = …
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe7

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

我如何实现IServiceProvider?

如何IServiceProvider在我继承其他接口的类中实现,以便实际调用它们的方法?现在我总是E_NOINTERFACE回来QueryInterface.

    TPassthrough = class(TComObject, IInternetProtocolRoot, IInternetProtocolSink, IInternetProtocol, IServiceProvider)
    private
      FDefaultSink: IInternetProtocol;
      FProtSink: IInternetProtocolSink;
      FBindInfo: IInternetBindInfo;
    public
    { IServiceProvider }
    function QueryService(const rsid, iid: TGuid; out Obj): HResult; stdcall;

    { IInternetProtocolSink }
    function Switch(const ProtocolData: TProtocolData): HResult; stdcall;
    function ReportProgress(ulStatusCode: ULONG; szStatusText: LPCWSTR): HResult; stdcall;
    function ReportData(grfBSCF: DWORD; ulProgress, ulProgressMax: ULONG): HResult; stdcall;
    function ReportResult(hrResult: HResult; dwError: DWORD; szResult: LPCWSTR): HResult; stdcall;

    { IInternetProtocolRoot }
    function Start(szUrl: LPCWSTR; OIProtSink: IInternetProtocolSink; OIBindInfo: IInternetBindInfo; grfPI, dwReserved: DWORD): …
Run Code Online (Sandbox Code Playgroud)

delphi com bho urlmon delphi-xe7

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

事件没有被解雇

我试图使用WebWorkerStartedWebWorkerFinishedTWebbrowser然而事件只是不明白在所有被解雇.

我怎样才能使这些活动有效?我想看看哪些工作线程正在启​​动TWebbrowser.

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.OleCtrls, SHDocVw;

type
  TForm2 = class(TForm)
    WebBrowser1: TWebBrowser;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure WebBrowser1WebWorkerFinsihed(ASender: TObject; dwUniqueID: Cardinal);
    procedure WebBrowser1WebWorkerStarted(ASender: TObject; dwUniqueID: Cardinal; const bstrWorkerLabel: WideString);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);
begin
  WebBrowser1.Navigate('www.stackoverflow.com');
end;

procedure TForm2.WebBrowser1WebWorkerFinsihed(ASender: TObject; dwUniqueID: Cardinal);
begin
  // …
Run Code Online (Sandbox Code Playgroud)

delphi twebbrowser delphi-xe7

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

循环通过UTF8String

如何迭代单个字符UTF8String?我需要打印出单个字符而不是字节..

program Project3;

uses
  System.SysUtils;

var
  Str: UTF8String;
  I: Integer;
begin
  Str := '?????';
  for I := 0 to Length(Str) do
  WriteLn(Str[I]);
  ReadLn;
end.
Run Code Online (Sandbox Code Playgroud)

delphi delphi-xe7

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