我一直在尝试用 C++ 开发一个可以在应用程序中运行时加载的动态库。我终于成功了,但它有点难看。我有一个函数,它将指向 C++ 类的指针作为参数,如下所示:
bool registerGrindPlugin( Grind::PluginManager* mgr );
Run Code Online (Sandbox Code Playgroud)
但当然它被导出为:
_Z19registerGrindPluginPN5Grind13PluginManagerE
Run Code Online (Sandbox Code Playgroud)
我尝试了一个带有简单函数的 .c 文件,它可以很好地导出为“registerGrindPlugin”,但当然我不能以这种方式传递 C++ 类作为参数。
所以...我的问题是,有没有办法对导出的符号进行解开或别名,这样我就不必在 dlsym 调用中使用像 Z19registerGrindPluginPN5Grind13PluginManagerE 这样的怪物?
我确实看到了一些关于 -alias_list 作为链接器选项的内容,但我还没有完全弄清楚如何在 Xcode 中使用它。如果这是解决方案,有人可以提供有关如何使用它的更多详细信息吗?
所以我正在开发一个项目,将C#客户端与现有的服务器技术连接起来.其中一个要求是使用Diffie-Hellman进行密钥交换.
我们已知公共P和G,我需要生成一个1024位的公钥才能发送到服务器.
以下是在C++中使用OpenSSL在服务器端使用的.目前我在通过P/Invoke调用的本机DLL中使用相同的代码,它也可以工作.如果可能的话,我宁愿消除本机DLL依赖.
char publicKey[128];
char P[128]; //this is set to a static 128-byte value, omitting for brevity
unsigned long G = 2;
DH* dh = DH_new();
dh->p = BN_new();
dh->g = BN_new();
BN_set_word(dh->g, G);
BN_bin2bn(P, 128, dh->p);
if(DH_generate_key(dh))
{
BN_bn2bin(dh->pub_key, publicKey);
}
Run Code Online (Sandbox Code Playgroud)
这会生成一个1024位的公钥.
我已经尝试过在BouncyCastle中使用DH类,但无论出于什么原因我无法给它一个1024位密钥,它想给我一个960位密钥.可能是因为我真的不知道自己在做什么.我找不到关于如何使用类的实际解释方式.
是否可以使用BouncyCastle DH类与上面发布的OpenSSL DH代码一样工作?如果没有,是否有另一个更好的C#实现?
请考虑以下代码:
class Foo;
Foo& CreateFoo();
void Bar()
{
CreateFoo();
}
Run Code Online (Sandbox Code Playgroud)
在Visual Studio中,这将导致错误C2027,即Foo是未定义的类型.在大多数其他编译器中,它编译得很好.如果未分配CreateFoo的返回值,则只是一个问题.如果我将行更改为:
Foo& foo = CreateFoo();
Run Code Online (Sandbox Code Playgroud)
它在Visual Studio中编译得很好.此外,如果定义Foo而不是仅仅向前声明,那么它将编译正常而没有赋值.
哪个应该是正确的行为?C++标准中有什么可以解决这个问题,还是留给实现的呢?我看了,没有看到任何谈论这件事.
更新: 已提交错误报告.
这是一个新的问题,香港专业教育学院做了所有的编码,但我无法将asm与c ++连接,即时通讯使用Windows visual studio 2010,我把主要放在源文件中,我的asm文件放在资源文件中,当我尝试编译时它只是给我一个链接错误
1>------ Build started: Project: clearArray, Configuration: Debug Win32 ------
1>clearArray.cpp
1>clearArray.obj : error LNK2019: unresolved external symbol _clearPointerOp referenced in function _main
1>clearArray.obj : error LNK2019: unresolved external symbol _clearIndexOp referenced in function _main
1>C:\Users\Joe Chen\documents\visual studio 2010\Projects\clearArray\Debug\clearArray.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Run Code Online (Sandbox Code Playgroud)
这个hw的目的是使用索引方法和指针方法清除数组,然后优化生成的asm代码
请帮忙!!!
继承我的代码:main.cpp
// clear array using unoptimized code with index and pointers
#include<iostream>
#include<fstream>
#include"timer.h"
using namespace std; …Run Code Online (Sandbox Code Playgroud) 所以我一直在使用 Autotools 尝试学习工具链,以便我可以在我的一些跨平台项目中使用它。我已经很好地掌握了最基本的知识,但我在这里遇到了一个问题。
在我的源代码树中,我有一个“data”文件夹,其中包含一个带有 XML 文件的子目录和另一个带有图像文件的子目录。
IE:
data\
cars\
images
Run Code Online (Sandbox Code Playgroud)
我希望能够使用相同的目录结构将这些文件复制到暂存区。
我试过在数据中创建一个 Makefile.am ,然后做类似的事情:
data_DATA = cars/file1.xml cars/file2.xml images/image1.png images/image2.png
Run Code Online (Sandbox Code Playgroud)
等等...
这“几乎”有效。它将所有文件复制到暂存区的“共享”文件夹中,但底层目录结构丢失;所有文件都在“共享”根目录中。
有关如何完成此操作的任何提示?
编辑:
啊我似乎已经想通了(我想。)
data_carsdir = $(prefix)/data/cars
data_cars_DATA = cars/file1.xml cars/file2.xml
data_imagesdir = $(prefix)/data/images
data_images_DATA = images/image1.png images/image1.png
Run Code Online (Sandbox Code Playgroud)
这似乎以我想要的方式工作。
所以我正在努力从非常古老的C++/Carbon代码更新大型项目,并且我一直在使用已弃用的函数.
所以我想这个问题有两个方面.
当前的问题是:
应该使用什么代替10.7中不推荐使用的以下函数?是否有Cocoa等价物,或更新的碳当量?
MPCreateEvent MPDeleteEvent MPWaitForEvent MPSetEvent
问题的第二部分是,Apple开发者网站或其他地方是否有一些地方,我可以找到更多关于在旧代码被正式弃用的情况下应该使用什么的信息?
考虑以下代码:
template<typename T0>
void send( const std::string& func, const T0& t0 )
{
std::ostringstream s;
s << func << ": " << t0;
sendMessage( s.str() );
}
template<typename T0, typename T1>
void send( const std::string& func, const T0& t0, const T1& t1 )
{
std::ostringstream s;
s << func << ": " << t0 << "," << t1;
sendMessage( s.str() );
}
template<typename T0, typename T1, typename T2>
void send( const std::string& func, const T0& t0, const T1& t1, const …Run Code Online (Sandbox Code Playgroud) 这可能是一个长镜头,但.NET的灵活性永远不会让我惊讶,所以这里.
我正在开发一个MVC应用程序,需要在一组程序集中搜索从公共基类派生的类类型.
即我有几个具有活动类型的程序集,这些活动类型都派生自ActivityBase.这些程序集将放在特定目录中.它们有点像插件.由于它们需要在运行时动态加载,因此它们还需要伴随一些依赖项(除非我能找到一种方便的方法来分隔它们,所以也可以自由地加入它们.)
我有代码将遍历此目录中的所有.DLL文件,加载程序集,并遍历程序集中的所有类型以查找派生自ActivityBase的类型.
这很好用.但是,我想避免加载和搜索没有活动的程序集,因为某些依赖项有数千种类型,这就成了性能问题.
所以我想我的问题是,除了文件命名约定之外,是否有任何方法可以"装饰"或使用某种类型的数据标记程序集,这些数据表明它是一个活动程序集,可以在构建时轻松实现自动化在运行时轻松阅读?
还欢迎任何其他处理此问题的建议.
好的,所以我第一次尝试使用ADO.NET实体框架.
我的测试用例现在包括一个SQL Server 2008数据库,其中包含2个表,Member和Profile,关系为1:1.
然后,我使用Entity Data Model向导从数据库中自动生成EDM.它生成了一个具有正确关联的模型.现在我想这样做:
ObjectQuery<Member> members = entities.Member;
IQueryable<Member> membersQuery = from m in members select m;
foreach (Member m in membersQuery)
{
Profile p = m.Profile;
...
}
Run Code Online (Sandbox Code Playgroud)
中途工作.我可以遍历所有成员.但我遇到的问题是m.Profile始终为null.MSDN库上LINQ to Entities的示例似乎表明我将能够无缝地遵循这样的导航关系,但它似乎不会那样工作.我发现如果我首先在某个单独的调用中加载配置文件,例如使用entities.Profile.ToList,那么m.Profile将指向一个有效的配置文件.
所以我的问题是,是否有一种优雅的方式来强制框架自动加载导航关系中的数据,或者我是否需要通过连接或其他方式明确地执行此操作?
谢谢
不知怎的,这是我多年来第一次在编程中遇到过这个问题,而且我不确定处理它的选项是什么.
我正在将应用程序移植到Linux,并且其中一个目录中有一个头文件,显然与标准C库中的头文件同名,并且当"cstdlib"包含在另一个文件中时它正在尝试包含本地文件,而不是标准库中的正确文件.
特别是,该文件名为"endian.h",它试图包含在/usr/include/bits/waitstatus.h中.因此,它不是包含/usr/include/bits/endian.h,而是尝试包含./endian.h.没有区别
我唯一的选择是将项目中的endian.h重命名为其他东西,或者是否有一种方法可以强制编译器在与首先包含它的文件相同的目录中查找?
编辑:
好吧,这对我来说只是一个愚蠢的错误.我的Makefile正在设置-I.,所以它首先在当前目录中查找.D'哦.
我正在寻找一种很好的方法来查找特定Windows服务的进程ID.
特别是,我需要找到Windows附带的默认"WebClient"服务的pid.它作为svchost.exe进程中的"本地服务"托管.我看到当我使用netstat来查看哪些进程正在使用它在进程名下列出[WebClient]的端口时,所以我希望有一些(相对)简单的机制来查找这些信息.
所以我正在研究如何将Service Fabric用于非常大的应用程序.我需要做的一件事是一个按名称划分的服务,这在应用程序清单级别看起来相当简单.
但是,我真的希望能够动态添加和删除命名分区,而无需重新发布应用程序.
每个分区代表我们相当于租户,我们希望有一个后端管理应用程序来添加新租户.
每个分区都是一个长期运行的应用程序,它启动一个使用自定义协议的TCP服务器,我需要能够从群集中按名称查询地址.
这是否可以使用Service Fabric,如果有的话,是否有任何关于此的文档,或者我应该寻找的东西?
所以我在EF中有以下模型:
public class User: IEntity
{
public Guid Id { get; protected set; }
public string Email { get; protected set; }
internal User()
{
}
public User(Guid id, string email)
{
Id = id;
Email = email;
}
}
public class Tenant : IEntity
{
public Guid Id { get; protected set; }
public string Name { get; protected set; }
internal Tenant() { }
public Tenant(Guid id, string name)
{
Id = id;
Name = name;
}
} …Run Code Online (Sandbox Code Playgroud) c++ ×5
c# ×3
macos ×2
.net ×1
ado.net ×1
assemblies ×1
assembly ×1
autotools ×1
boost ×1
bouncycastle ×1
c++11 ×1
cocoa ×1
code-first ×1
dylib ×1
g++ ×1
linker ×1
linq ×1
macos-carbon ×1
objective-c ×1
staging ×1
symbols ×1
winapi ×1
xcode ×1