标签: dll

如何在我的delphi项目中从delphi Dll继承自定义表单(可视继承)

我有一个dll(在Delphi中创建),其中包含一个继承自TForm的TGlobalForm

我想在我的项目(Delphi Project)中使用TGlobalForm并从TGlobalForm继承一些表单.

示例TAccountsForm = class(TGlobalForm)

问题是我不想在项目的使用中使用GlobalForm pas文件,我希望它就像你创建一个新表单(File-> New-> Other)并选择(可继承的项目) )在(Delphi Projects)节点下,所以新创建的表单将显示继承表单的项目(按钮,编辑...)(TGlobalForm)

怎么做到这一点?

我正在使用Delphi XE3 - VCL Project

谢谢.

delphi dll inheritance plugins delphi-xe3

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

在DLL过程中使用Process32First/Next

我有以下程序:

procedure MyMainThread.MapProc;
var
  Handle: THandle;
  PID: dword;
  Struct: TProcessEntry32;
  Processes: TStringList;
begin
  Handle:= CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  Struct.dwSize:=Sizeof(TProcessEntry32);
  Process32First(Handle, Struct);
  Processes:= TStringList.Create;
  repeat
    Processes.Add(Struct.szExeFile);
    Processes.SaveToFile('C:\Log.txt');
    PID:= Struct.th32ProcessID;
    PIDHandle:= OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_OPERATION or
      PROCESS_VM_READ, false, PID);
    CloseHandle(PIDHandle);
  until (not Process32Next(Handle,Struct));
  Processes.Free;
end;
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我将运行的进程保存在C:\ Log.txt中,这在.exe文件中很有用.现在我正在尝试在.DLL文件中实现它,概念是:DLL将被加载,它将有一个EntryPoint调用Thread.Create ...这个Thread将使用SetTimer来运行MapProc的过程每10秒钟在C:\ Log.txt中保存正在运行的进程.代码是:

library Project1;

uses
  Windows,
  SysUtils,
  Classes,
  Registry,
  EncdDecd,
  TLHelp32,
  IdHTTP;

{$R *.res}
type
  MyMainThread = Class(TThread)
  var
    DestDir, ContactHost: String;
    Sent: TStringList;
    PIDHandle: THandle; //need to be public because we use in MapProc / CatchYa
  private …
Run Code Online (Sandbox Code Playgroud)

delphi dll winapi

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

与MSVCR DLL有什么关系?

它是为了什么?

为什么他们的各种版本呢?什么是可用的版本以及它们各自匹配的内容?

为什么它似乎导致许可证问题?EG:我有些像py2exe这样的工具无法捆绑它们但是你仍然需要它们来运行生成的exe.

如果要为Windows分发软件,如何解决这个问题:

  • 技术上:如何确保用户有一个?如果不是如何提供一个?适用于所有版本的Windows.
  • 合法:自由软件的功能是否相同?对于盈利软件?有具体的事情要做吗?

windows dll

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

带有'd'后缀的大尺寸dll

我正在尝试为Windows平台制作​​独立的应用程序.我搜索了我的应用程序所依赖的dll,将它们放在exe上,并且工作正常.

最近,在我的一个应用程序中,我看到所询问的依赖关系有点不同:

  1. Qt5Guid.dll而不是Qt5Gui.dll
  2. Qt5Declaratived.dll而不是Qt5Declarative.dll

和一些更类似的..

常见的是,所有这些新的依赖项都是相同的旧依赖项,并附加了一个d.当我使用带有'd'的新的时,我的应用程序运行正常.问题是所有这些带有'd'的dll的大小几乎都比正常的db大100Mb.

例如:

Qt5Guid.dll~119 Mb

Qt5Gui.dll~4 Mb

这使我的包大小变大,可以作为一个应用程序.

Q1.普通dll和带有d后缀的对应物之间有什么区别.?

Q2.我可以做些什么来使我的应用程序明确依赖于正常的应用程序,因此我的应用程序的大小更小?

dll qt qml qt5

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

如何加密c#代码,使其不易反编译和读取

我们计划保护我们的应用程序,以便其他程序员无法反编译.我知道有些工具可以像JetBrains dotPeek那样反编译一个dll和exe.是否有可以实现这一目标的工具或程序.

.net c# compiler-construction dll obfuscation

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

将C结构传递给C DLL中的函数

.DLL使用其中的一些实用程序函数创建了"命名"共享内存

我需要struct使用具有以下原型的函数通过python 写入/读取C :

  • int write_shmem(const char* shmem_name, char* shmem)
  • int read_shmem ( const char* shmem_name , char* shmem);

.DLL文件中

  • shmem_name 是共享内存名称
  • shmem 是要写的数据

C struct类似于

typedef struct {
   unsigned char c;
   unsigned long l;
   float f;
   double d;
 } DataBlock ;
Run Code Online (Sandbox Code Playgroud)

我在python代码中使用以下

from ctypes import *
dll = cdll.LoadLibrary('shared_mem.dll')
write_shmem = dll.write_shmem
write_shmem.restype = ctypes.c_int

read_shmem = dll.read_shmem
read_shmem.restype = ctypes.c_int

class DataBlock(Structure):
    _fields_ = [('c', c_ubyte), ('l', c_ulong),
                ('f',c_float), ('d', c_double) …
Run Code Online (Sandbox Code Playgroud)

c python dll ctypes

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

#ifdef WIN32DLL_EXPORTS是什么意思?

我已经创建了一个DLL文件,在头文件中我看到:

#ifdef WIN32DLL_EXPORTS
Run Code Online (Sandbox Code Playgroud)

我不明白它是什么意思,我们在哪里/如何设置WIN32DLL_EXPORTS.

如果我使用:

#ifdef WIN32DLL_EXPORTS
    #define WIN32DLL_API __declspec(dllexport)
#else
    #define WIN32DLL_API __declspec(dllimport)
#endif

WIN32DLL_API int testSum(void);
Run Code Online (Sandbox Code Playgroud)

testSum被认为是__declspec(dllimport).所以我认为我的项目没有设定WIN32DLL_EXPORTS?我怎么能改变这个?

c++ dll winapi

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

使用LoadLibraryA加载DLL错误

我们正在尝试使用LoadLibraryA函数从64位dll中加载一个dll库.它返回126错误 - 未找到mod.给我们的函数的dll文件路径是正确的,我们确定.

我们已经尝试了一个虚拟dll进行测试并且它有效,它已加载.

我们还尝试将dll(这是我们想要加载的第一个dll的依赖性)添加到虚拟dll.它也有效.所以问题似乎不是关于依赖dll,而是我们想要首先加载的原始dll.

我们也尝试将dl转换为64位,并尝试了,仍然没有好处.

我们还使用Dependency Walker检查了依赖关系.一切都好.

我们使用的操作系统是Windows 8,64bit.如果它有任何区别..有没有人对这个问题有任何想法?

编辑:我们也试过这段代码:

hModule = LoadLibraryW(L"C:\\temp\\dllToLoad.dll");
Run Code Online (Sandbox Code Playgroud)

并收到此错误代码:

"First-chance exception at 0x00000000 in C_Test_TSMPPKCS11.exe: 0xC0000005: Access violation at location 0x0000000000000000."
Run Code Online (Sandbox Code Playgroud)

编辑2:我们首先使用的代码是:

hModule = LoadLibraryA((char*)aDLLFile);
Run Code Online (Sandbox Code Playgroud)

编辑3:我们使用完整路径加载DLL.为了测试这个,我们尝试了这段代码:

FILE *fp;
    int size = 0;
    fp=fopen("C:\\temp\\dllToLoad.dll", "r");
    size = fgetc(fp);
    printf("size:%d\n",size);
    fclose(fp);
Run Code Online (Sandbox Code Playgroud)

没问题,我们收到的文件大小是77.

c++ dll loadlibrary

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

使用字符串到接口的GetType

我为Control DLL创建了一个DLL加载器(这些控件具有相同的接口iControlPlugin),一切都很好用.但是我现在需要为设备驱动程序创建一个DLL加载器.我开始查看我的Control Loader代码,并意识到代码是相同的,除非定义了接口类型.因此,我想使我的控制加载器功能更通用,以便它可以用于不同的接口类型.

我修改了函数,以便它返回一个字典,我遇到的问题是我做了一个检查,以确保DLL文件包含匹配的类型,在我的情况下,这是两种接口类型之一.但我总是无效.

这是我原来的工作功能,专门针对一种类型(iLPPControlPlugin)

public Dictionary<string, iLPPControlPlugin> LoadPlugins(string folder)
{
    /* Create a Dictionary object to store the loaded DLL's */
    Dictionary<string, iLPPControlPlugin> plugsins = new Dictionary<string,iLPPControlPlugin>();

    /* Get all the DLL files from the path specified */
    string[] files = Directory.GetFiles(folder, "*.dll");

    /* Go through each DLL... */
    foreach (string file in files)
    {
        /* Load the file, as an assembly. */
        Assembly assembly = Assembly.LoadFile(file);

        /* Get the type, can be more than one */
        var types …
Run Code Online (Sandbox Code Playgroud)

c# dll interface gettype

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

如何调试我自己的DLL文件作为插件导入到其他应用程序?

我们在Visual Studio中创建了一个C#项目,结果是一个DLL文件.如果我们将该DLL文件导入第三方应用程序,它将充当插件.一切都好.但我的DLL文件中有一个错误,我可以通过放置一个调试点找到它.但我不知道如何为导入第三方应用程序的DLL执行此操作.

c# debugging dll visual-studio-2010 visual-studio-debugging

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