草庐IT

shared-libraries

全部标签

c - 在windows C中加载dll进行跨平台设计

我写了一个为linux平台设计的C代码。现在,我想让它跨平台,以便在Windows中使用。在我的代码中,我dlopen一个so文件并利用其中的函数。下面是我的代码的样子。但是我才发现,在windows下,加载和使用动态库的方式有很大的不同。void*mydynlibmydynlib=dlopen("/libpath/dynlib.so",RTLD_LAZY);void(*dynfunc1)()=dlsym(mydynlib,"dynfunc1");void(*dynfunc2)(char*,char*,double)=dlsym(mydynlib,"dynfunc2");int(*dy

c++ - std::tr1::shared_ptr 是否互斥?

我有一个包含BYTE*的类,一个引用计数器和一个CRITICAL_SECTION这可以保护它们免受并发访问。我想用std::tr1::shared_ptr替换所有这些.MSDN说:Multiplethreadscanreadandwritedifferentshared_ptrobjectsatthesametime,evenwhentheobjectsarecopiesthatshareownership.一切听起来都很好,直到我发现CRITICAL_SECTIONfromclass在它的外部使用来“锁定”它并以互斥的方式改变它的内容。好的,它破坏了封装,我想改变它。我知道share

Windows 文件共享 : What ACE AccessMask flags correspond to the different share permissions?

最近我尝试使用WMI创建一个共享并向用户授予读写权限。现在使用0x1(FILE_READ_DATA/FILE_LIST_DIRECTORY)和0x2(FILE_WRITE_DATA/FILE_ADD_FILE)不起作用。设置所有标志让我完全控制。我必须使用哪些标志分别设置读取、更改和完全控制共享权限? 最佳答案 我通过反复试验发现了以下内容:对于读取权限,您需要使用0x1200A9。这对应于以下标志:FILE_READ_DATA(file)orFILE_LIST_DIRECTORY(directory)1(0x1)FILE_READ

可以仅使用 C 来利用 Windows API 吗?

我正在自学C(来自Java)。我非常欣赏这门语言,我学习它的主要原因之一是我可以利用Java内置的JNI功能在必要时编写native代码。我的问题主要是关于WindowsAPI。我可以仅使用C来使用API的功能和特性吗?WindowsAPI是否与纯C代码兼容,或者它是否包含只能由C++代码使用的类等?此外,如果我在Windows机器上将共享库编译为(lib.slNOTlib.dll),它可以在另一台机器(Mac/Linux)上运行吗? 最佳答案 WindowsAPI(又名Win32API)是一个纯C库。不可以,你不能在另一台非Win

Windows 2008 schtasks 和 Task Scheduler Library 文件夹

我有一个启动计划任务的旧脚本:schtasks/end/tnMyTaskName/sHOSTNAME我现在正尝试在Windows2008上使用它,但它不起作用。我认为这是因为新的TaskScheduler允许您在主“TaskSchedulerLibrary”下指定子文件夹,并且我已将MyTaskName放在名为MyTasks的子文件夹中。与schtasks一起使用的正确语法是什么? 最佳答案 本地版本可以吗?例如schtasks/end/tn"MyTaskName"如果是这样,则可能是防火墙问题。

java - 在 Windows 7 上从 Java 启动 CYGWIN 构建的可执行文件失败并显示 "error while loading shared libraries: ?: No such file or directory"

有问题的代码在早期版本的Windows上或多或少地以完全相同的配置工作,但是,还不知道它是否可以在Windows7上运行!这就是我现在需要解决的问题。简而言之,一些C代码在启动Java程序之前执行一些配置和安全检查,传递一些在Java中几乎不可能轻松完成的数据。反过来,Java在适当的时间启动相同的C代码,然后它自己启动一个不同的Java程序。第二个程序启动需要完全独立,(想想nohup)因此是第二个启动。现在发生的事情是C程序以普通方式启动Java程序,但是当Java尝试启动C程序时,它会出现如下错误:/cygdrive/c/opt/ST/v3.3/bin/ST.exe:errorw

c++ - 跨进程加载 DLL - 如何进行某些操作 "singleton-like"

背景我正在开发一个C++windows应用程序。我的应用程序将打开多个进程。每个进程都会加载一个LoggerDLL,它提供了一个接口(interface)来注册日志事件并决定何时以及如何将日志刷新到文件中。问题假设我在LoggerDLL中定义了一个简单的决定:每次注册100个日志事件时,将它们刷新到一个文件中。如何确保刷新仅由DLL的一个实例执行一次?当DLL跨进程共享并且其中一个操作只需要跨进程执行一次时,最佳实践方法是什么?注意事项定义共享内存至关重要。每个进程都需要知道其他进程的日志事件。因此,我们不能让每个DLL实例都存储自己的日志并分别刷新它们。

c++ - C++ 和共享库中的代码执行点

我和一位同事就使用共享库时的内存分配以及实际执行代码的“位置”进行了有趣的讨论。提示:我是在明确地寻找笼统的答案。我知道在构建共享库和应用程序时使用完全相同的编译器和设置时,以下几点会起作用。我想假设DLL是使用与应用程序完全不同的编译器构建的。给定以下structFoo:structFoo{intm_FooBar=1;constchar*GetBar(){returnm_Bar.c_str();}voidSetBar(constchar*value){m_Bar=value;}private:std::stringm_Bar;};假设共享库公开了一个函数Foo*GetFoo()并且外

windows - 使用 Share-Delete 打开文件是否允许其他人写入?

FileShare枚举提供各种标志,例如读取、写入、删除...。通常我会认为共享文件删除只允许删除而不能做其他事情(比如阅读)。但是,我依稀记得Windows只区分文件的只读访问权限和完全访问权限,因此实际上为删除而共享也允许写入文件。遗憾的是,这是很多年前的事了,我既没有找到原始来源,也没有找到任何相关信息。是否有关于实际行为的可靠规范?它取决于操作系统还是FS? 最佳答案 查看CreateFileFunction的文档.FILE_SHARE_DELETE:Enablessubsequentopenoperationsonafil

windows - 创建 ELF 镜像

我需要从共享对象(.so文件)创建一个ELF镜像文件并将其写入Windows中的另一个分区。然后在Linux中打开这个分区并加载共享对象。有人知道如何在Windows中创建ELF镜像(许多共享对象的bundle)吗? 最佳答案 您可以使用Cygwin并尝试合适的GCC交叉工具链。也许您必须先自己构建它(这很麻烦),但事情就是这样......编辑:好的,给你:一个简化的:BuildingGCCcrosscompiler(from"Linux"to"Windows")--基本步骤与那里描述的相同。您只需要使用相关的--host=...和