免费的图标资源

Iconfinder

Iconfinder is the best icon search engine. There are a lot of high-quality icons available, and you can filter the results to show only those that are licensed for commercial use.

Iconfinder

Icon Fever

Icon Fever is our own gallery site of icons. You can browse icons by license to find those that can be used for commercial projects, and you can also browse by tag.

Icon Fever

IconsPedia

IconsPedia includes and icon search engine and the archives can be browsed by category.

Continue Reading

GAppProxy被频繁重置

今天使用GAppProxy代理用Google搜索内容时发现GAppProxy已经没有原先的那么稳定了,会不时的出现被重置的情况。现在看来GAppProxy也不是最好的解决方法了。话说自从出了什么“天河超级计算机之后应该是又部署到了大墙上了,于是就出现了现在的频繁重置的情况。要解决这种状况如果有支持SSH访问的主机的朋友可以使用ssh来搭建socks代理服务器来实现搜索。

下载Putty,链接自己的服务器,登录之后会显示一个终端,如下图所示:

Continue Reading

关于变量、指针、别名(引用)和指针的指针

C/C++中的指针和别名这个东西确实是够恶心的。今天蛋疼的就写一下这些东西的区别,变量永远是最简单的没有什么技术含量,那么另外一个比较简单的就是别名了,其实个人感觉这个东西完全可以看作是一个人的“小名”,只是对同一个变量多了一个称呼而已,指向的数据和地址是和原变量完全一致的,并且用&进行取地址操作的得到的地址和原变量的地址是完全一致的(因而在对指针进行赋值的时候如果直接对指针地址操作则需要对变量或者别名使用&进行取地址运算,如果要直接赋值则需要使用*p=进行赋值)。最复杂的就是指针了,同样个人认为指针到头来就是一个地址,这样可能会比较好理解一些。例如*pointer,那么带有*(解引用操作符)的时候则是表示的数值,如果没有*则表示的是地址。也就是说可以将pointer看成一个内存地址在这个地址中保存的是另外一个数据的地址,当存在*的时候表示取该地址存取的内容,否则则是取这个变量保存的地址。指针的指针则就更加复杂了,例如**p,那么可以看作指针保存的数据是另外的一个指针,解引用操作一次将会得到一个*p,这仍然是个指针,当进行二次解引用操作的时候(**p)才能读到p中保存的数据信息。这么说可能比较难理解,那么看个实例就明白了。效果如下图:

Continue Reading

MemLibrary 内存 加载DLL DELPHI

一个简单的例子:

type
  mbf = function(hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer;
  stdcall;

procedure TForm1.Button1Click(Sender: TObject);
var
  h: integer;
  mb: pointer;
  ms: TMemoryStream;
begin
  ms := TMemoryStream.Create;
  ms.LoadFromFile('f:\user32.dll');
  h := memLoadLibrary(ms.Memory);

  if h > 0 then
  begin
    mb := memGetProcAddress(h, 'MessageBoxA');
    if mb <> nil then
      mbf(mb)(handle, 'test', 'test', mb_ok);
  end;

  memFreeLibrary(h);
  ms.Free;
end;

代码未经测试,只是转载备用。

Continue Reading