几个比较菜的问题,请高手赐教:
steeven
2007-01-14
1.拿到dll和文档,怎样调用里面的方法?有什么工具可以d的调用代码?
2.lib文件怎么生成? 怎么知道extern的方法在哪个lib里面? 3.为什么编译出来的exe那么大?怎样减肥? 4.怎样调用包含com的DLL, 根据名字查UUID? vs2005里面可以导入dll,生成调用代码,d怎么做? 5.哪里能看到char[]有哪些方法? .toUTF8()在哪里定义的? |
|
qiezi
2007-01-15
steeven 写道 1.拿到dll和文档,怎样调用里面的方法?有什么工具可以d的调用代码?
2.lib文件怎么生成? 怎么知道extern的方法在哪个lib里面? 用implib生成.lib文件,接口声明我不大清楚,pexport应该是可以吧,肯定要手工修改一些,以前做过的都记不清了。 steeven 写道 3.为什么编译出来的exe那么大?怎样减肥? 你编译出来有多大?应该不会太大,这可是包含了全部runtime的体积呀。 steeven 写道 4.怎样调用包含com的DLL, 根据名字查UUID? vs2005里面可以导入dll,生成调用代码,d怎么做? 这些就别指望有现成的工具吧,D接口声明加上extern(Windows),其二进制模型和COM是兼容的。这里我演示了一些调用,搬家导入过来时被截断了,原文在这里。不过接口声明文件是使用的另一个库,自己写也不麻烦。 steeven 写道 5.哪里能看到char[]有哪些方法? .toUTF8()在哪里定义的? char[]是个数组,只有几个简单的方法,文档的数组部分有这些内容,toUTF8在std.utf里面,用grep或其它搜索工具很容易搜到。 |
|
steeven
2007-01-15
关于4.找到了Type Library Importer (tlbimpd),是juno的一部分
http://dsource.org/projects/juno 据说生成com包装,要象vs里面那样简单。 不过好像要用到juno的代码,dmd1.0编译不过。 看例子是很简单的,不错。D社区真是刚起步啊,这个项目就一个开发者,论坛上就几条讨论,晕。。。 另外,1.0里面char[] a好像不能用为char*, 必须用a.ptr, 而且a的字符串后面是0结尾,是dmd自动加上的? |
|
qiezi
2007-01-15
steeven 写道 1.0里面char[] a好像不能用为char*, 必须用a.ptr, 而且a的字符串后面是0结尾,是dmd自动加上的?
有几个方法: 1、cast(char*)"aa"; 2、std.string.toStringz("aa"); 结尾加0应该是碰巧吧,并不保证一定安全,因为那块内存没使用过,所以初始化成0了。下面这个测试: char[] s1 = "abc"; char[] s2 = s1[0..2]; char* p = cast(char*)s2; p指向的内容实际上还是abc,正确的做法是使用toStringz。 |
|
steeven
2007-01-15
果然,初始分配的才有0,截取的就不行了。
截取后的指针指向原来的一部分。 茄子反应好迅速啊~ |
|
steeven
2007-01-15
在juno.utils.registry里面有:
wchar[] b = new wchar[cb / 2]; RegQueryValueEx(hkey_, name.toLPStr(), null, type, b.ptr, cb); char[] result = b.toUtf8(); //应该编译不过啊 难道是哪里做过手脚? |
|
qiezi
2007-01-15
OMG!
这么大个特性,居然一直不知道。这个特性和C#(好像是3.0才有)是一样的,C#需要this关键字。可以用来扩充一些类型,借鉴ruby的优点。 C#的用法是这样的: char[] toUTF8(this wchar[] s){ ... } D里面是这样的: char[] toUTF8(wchar[] s){ ... } 本来是编译不过的,不过只要import std.utf,就可以编译了,因为里面定义了char[] toUTF8(wchar[]),不知道什么时候加入的?竟然一直不知道。。。。 。。。。。。赶紧找文档去。 |
|
qiezi
2007-01-15
好像只对数组有效啊,其它类型似乎都不可以。
|
|
steeven
2007-01-15
呵呵,茄子对各个语言都很精通啊
d有没有动态方法?php里面有的,如果有会很方便。 |
|
qiezi
2007-01-15
动态指的是动态生成?这肯定是没有的,各种静态类型语言应该都不支持(c/c++/java/c# ...),顶多支持个委托吧,算半动态了。
我对很多语言都了解点皮毛而已,比较特别的特性印象深刻点,实际上很少用那些语言,熟一点的就是c++/ruby/python/d吧,也不算很熟,平时用得多点。 |
相关讨论
相关资源推荐
- hibernate应用配置说明-middlegen和hbm2java的配置
- 通过Middlegen生成hbm文件和java代码
- Hibernate代码生成初接触之Middlegen生成hbm文件和java代码
- 收藏:hibernate应用配置说明-middlegen和hbm2java的配置
- 转:hibernate应用配置说明-middlegen和hbm2java的配置
- hbm2java和hbm2ddl的使用步骤
- 使用MiddleGen-hibernate-r5生成hbm文件及POJO文件
- 自己亲自实践的ant的配置方法和middlegen生成hbmxml文件
- Hibernate学习笔记(二)hbm2java和hbm2ddl
- 利用Middlegen Hibernate3生成hbm.xml配置和java类