草庐IT

php与dll通信?

全部标签

c - 为什么 Windows 要求导入 DLL 数据?

在Windows上,可以从DLL加载数据,但需要通过导入地址表中的指针进行间接访问。因此,编译器必须知道正在访问的对象是否是使用__declspec(dllimport)从DLL导入的。类型说明符。这很不幸,因为这意味着设计用作静态库或动态库的Windows库的header需要知道程序链接到哪个版本的库。此要求不适用于函数,这些函数是为DLL透明地模拟的,stub函数调用实际函数,其地址存储在导入地址表中。在Linux上,动态链接器(ld.so)将所有链接数据对象的值从共享对象复制到每个进程的私有(private)映射区域。这不需要间接寻址,因为私有(private)映射区域的地址是模

c - 如何在 C 中的 DLL 中执行线程

我创建了一个运行3个工作线程的DLL,主线程处于循环中等待线程完成。线程已创建,但未执行线程。我尝试在使用CreateThread()创建的函数中设置MessageBox函数,但该框没有出现。我也尝试过调试,CreateThread()的返回值有效,因此线程被创建。BOOLWINAPIDllMain(){main();return1;}intmain(){HANDLEh1,h2,h3;h1=CreateThread(first)...h2=CreateThread(second)...h3=CreateThread(third)...WaitForSingleObject(h3,INF

c++ - DuplicateHandle() 是否进行任何进程间通信 (IPC),如果不进行,为什么要使用目标参数?

我正在寻找DuplicateHandle()非常困惑。第三个和第四个参数hTargetProcessHandle和lpTargetHandle似乎暗示这个API函数进行某种形式的进程间通信,但我在网上阅读的内容似乎暗示(没有直接说)实际上这个函数不能与外部的任何东西通信它自己的进程的地址空间,如果你真的想说将本地进程句柄复制到另一个进程,你必须自己手动完成。所以有人可以可怜我并明确地告诉我这个函数本身是否有任何IPC吗?另外,如果它不执行任何IPC,那么这两个参数的意义何在?如果没有发送数据并且此函数的输出对其他进程不可见,怎么会有“目标”?起初我以为我可以调用GetCurrentPr

c++ - 如何在库加载时将预处理器定义传递给 DLL

我正在开发一个链接到DLL的应用程序,该DLL本身包含一个数据结构,其定义因预处理器定义而异:structExample{uint8_tStringA[32];#ifUSE_Buint8_tStringB[32];#endif};我需要在我的应用程序中的不同时间使用结构的两个版本。因此,我似乎需要使用LoadLibrary加载DLL,其中USE_B未定义用于部分执行(这是标准且直接的),使用FreeLibrary卸载它,然后然后使用定义为非零值的USE_B再次加载它。我不确定如何执行此操作,如有任何帮助,我将不胜感激。 最佳答案 L

php - 在 Windows 10 上的 apache2.4 上启动 laravel 应用程序

我有一个laravel应用程序,我使用phpartisanserve对其进行了测试。我发现这是一种不好的做法,因为它没有在生产中使用。我已经安装了apache2.4,它工作正常,当我打开localhost时我看到“ItWorks”。现在我尝试在我的PC上通过apache启动我的laravel应用程序。为此我做了以下步骤:编辑Apache\conf中的httpd.conf,我取消注释这一行:LoadModulerewrite_modulemodules/mod_rewrite.so编辑了Apache\conf\extra中的httpd-vhosts.conf,我添加了:DocumentR

c++ - 如何在加密前拦截应用程序通信?

我正在尝试对Windows应用程序用于通过网络进行通信的协议(protocol)进行逆向工程。它使用TLS加密连接与服务器通信。我想拦截应用程序的相关调用(对TLS库或安全套接字API),并查看其明文消息。完全披露:这不是为了任何充实目的,而是为了改进开源项目。我试过在Linux上的Wine下运行该应用程序,上面的内容相当于一个LD_PRELOAD技巧,用于拦截对send()的调用。https://rafalcieslak.wordpress.com/2013/04/02/dynamic-linker-tricks-using-ld_preload-to-cheat-inject-fe

windows - 如何从 dll 中获取应用程序名称?

如果我有一个被LoadLibrary加载到应用程序(bar.exe)中的dll(foo.dll),我如何从foo.dll中获取字符串“bar.exe”? 最佳答案 将NULL作为第一个参数传递给GetModuleFileName(). 关于windows-如何从dll中获取应用程序名称?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/873770/

c++ - Win32 共享内存的包装类? (进程间通信)

您可以为Win32上的IPC推荐什么包装类?我试过XQueue,我发现它有点笨拙,想听听外面还有什么。在InterlockedPopEntrySList()上构建一些东西看起来不错,但这需要服务器2003。谢谢,亚当 最佳答案 我推荐Qt4(或者您可以查看源代码):http://doc.trolltech.com/4.5/qsharedmemory.html 关于c++-Win32共享内存的包装类?(进程间通信),我们在StackOverflow上找到一个类似的问题:

c++ - 如何在两个 C++ MFC 插件之间进行通信?

我有一个用于C++MFC应用程序的插件。我正在与同一应用程序的另一个插件的开发人员合作,它试图在我的代码中获取事件通知。这两个插件都是c++dll的形式。如何将消息从我的插件传递到他的插件?该解决方案需要对我们两个插件以及主机应用程序的不匹配版本具有鲁棒性。通知是在控制点移动期间发出的,因此每秒发送几次。我可以设置一个回调机制,在加载时他的插件使用函数指针调用我的插件中的一个函数。我们不保证任何加载顺序,但我们可能会定期检查。我知道Win32有一个消息系统,但我不确定它是如何工作的,真的。我们可以添加一个Hook,然后我可以发送消息,但我对如何同步消息ID或我所说的以外的任何细节有点模

c# - 在 C++ 非托管 dll 和 C# 托管 dll 之间发送 Byte[][]

我有一个导出以下方法的非托管C++dll:ERASURE_APIvoidencode(unsignedchar**inp,unsignedchar**outp,unsignedint*block_nums,size_tnum_block_nums,size_tsz);ERASURE_APIvoiddecode(unsignedchar**inp,unsignedchar**outp,unsignedint*index,size_tsz);inp和outp的大小可高达10KB,从C#托管代码调用这些方法的最佳性能方式是什么?编辑:我做了以下实现,它有效,但这是最有效的方法吗。C++:ER