我如何测试对象是D中特定类的实例?
类似于Javascript instanceof
关键字的东西?
我正在尝试使用DMD 2.058在32位Ubuntu Linux(11.10 Ocelot)上使用std.net.curl.
当我构建(dmd source.d
)时,我得到:
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticCtor30FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticCtor30FZv+0x6): undefined reference to `curl_global_init'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl.o): In function `_D3std3net4curl4Curl19_sharedStaticDtor31FZv':
std/net/curl.d:(.text._D3std3net4curl4Curl19_sharedStaticDtor31FZv+0x4): undefined reference to `curl_global_cleanup'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl_12fd_140.o): In function `_D3std3net4curl4HTTP4Impl6__dtorMFZv':
std/net/curl.d:(.text._D3std3net4curl4HTTP4Impl6__dtorMFZv+0x12): undefined reference to `curl_slist_free_all'
/usr/lib/gcc/i686-linux-gnu/4.6.1/../../../../lib/libphobos2.a(curl_12fd_140.o): In function `_D3std3net4curl4HTTP3dupMFZS3std3net4curl4HTTP':
std/net/curl.d:(.text._D3std3net4curl4HTTP3dupMFZS3std3net4curl4HTTP+0x53): undefined reference to `curl_slist_append'
[snip]
Run Code Online (Sandbox Code Playgroud)
我添加-L-lcurl
到我的命令行(完整命令:) dmd source.d -L-lcurl
但我得到完全相同的结果.我安装了libcurl4-openssl.我可以在这台计算机上构建一个简单的C卷曲程序而不会出现问题(gcc simple.c -lcurl
).我不知道从这里可以看到这一点.
更新:以下是根据以下方式调用链接器的方式dmd -v
:
gcc source.o -o source -m32 -lcurl -Xlinker -L/usr/lib -Xlinker -L/usr/lib64 -Xlinker --no-warn-search-mismatch -Xlinker --export-dynamic -lphobos2 -lpthread -lm …
Run Code Online (Sandbox Code Playgroud) 最近,来自同一家公司的两个软件用户开始体验随机关闭(没有错误消息,崩溃对话框,退出对话框等).我们能够将这两个系统的共同点分离到特定的软件(移动宽带设备管理器).当该软件运行时,我们的软件会在约2分钟的时间内随机关闭.如果我们退出宽带管理器,我们的软件将无限期地运行而不会出现问题.
我无法想到为什么我们的软件和他们的软件之间会有任何互动.我们的软件无法访问网络,宽带调制解调器甚至无法插入.
我们为客户提供了一个解决方案(以管理员身份运行我们的软件或在运行我们的软件之前退出移动宽带管理器)但我们希望解决问题,这样他们就不必担心做这些事情.
我在我们的软件上附加了一个远程调试器,但我不确定在哪里查看我们的软件究竟是如何死亡的.当我们的进程结束时,调试只以退出代码0结束.
我的问题是,如何调查Win32进程如何/为何被杀死,以及如何防止它发生?
编辑:我在十六进制编辑器中打开了宽带管理器及其使用的DLL,并引用了一个与我们完全相同的可执行文件.所以我猜这就是链接.重命名我们的可执行文件修复了我们用户的问题,但不幸的是,Sprint SmartView的愚蠢.
编辑:帮助罕见的其他开发人员点击:如果您的可执行文件已命名,phoenix.exe
并且您的最终用户正在运行Sprint SmartView,那么这就是您的程序随机死亡的原因.重命名您的可执行文件将解决此问题(或者花费几个月的时间来确定在Sprint中通知谁以使其真正得到解决).phoenix.exe
具体提到的文件是WwanCoreSdk.dll
.
我有一个十六进制的128位数字存储在一个字符串中(来自md5,这里不担心安全性),我想将其转换为base-36字符串.如果它是一个64位或更少的数字我将它转换为64位整数然后使用我发现的算法将整数转换为base-36字符串,但这个数字太大了所以我有点喜欢如何处理这个问题的损失.任何指导将不胜感激.
编辑:在Roland Illig指出通过电话说0/O和1/l并且没有获得超过十六进制的数据密度的麻烦之后我想我可能最终会留下十六进制.如果有一种相对简单的方法将任意长度的十六进制字符串转换为base-36字符串,我仍然很好奇.
我有一个复杂的范围,我想分配给一个类的数据成员.
chain(nicklist,
map!(a=>format("%s%d", nicklist[0], a))(sequence!"n+1"()))
Run Code Online (Sandbox Code Playgroud)
nicklist
只是一个string[]
.通常我的可信赖的朋友auto
会照顾这个,但对于数据成员我需要声明类型,我不知道该类型应该是什么.我试图找出如何使用typeof()
它来获取它,但运行时参数让我困惑,我无法弄清楚如何制定它.
(这是用于IRC机器人.nicklist是我希望它按顺序尝试的缺刻列表,在它已经耗尽了所有那些带有缺口碰撞的缺口后,它只会尝试附加数字的第一个缺口)
我正在写一个算法,我需要检查一个字符串是否只包含一个数字(不超过一个).目前我有:
if(current_Operation.matches("\\d")){
...
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做这个?谢谢.