几个比较菜的问题,请高手赐教:

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吧,也不算很熟,平时用得多点。
Global site tag (gtag.js) - Google Analytics