周末把开发的集成软件放在windows7环境中测试,发现iphlpapi.dll 在windows7下已经放弃支持AllocateAndGetTcpExTableFromStack,AllocateAndGetUdpExTableFromStack
没用办法只能重新修改程序进行重新编译
只能改用 GetExtendedTcpTable 。
具体参考:
http://msdn.microsoft.com/en-us/library/aa365928(VS.85).aspx
FastCGI 学习第二步就看看example下的echo.c吧 看看到底是一个什么东西。
源码:
#ifndef lint
static const char rcsid[] = "$Id: echo.c,v 1.5 1999/07/28 00:29:37 roberts Exp $";
#endif /* not lint */
#include "fcgi_config.h"
#include <stdlib.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#ifdef _WIN32
#include <process.h>
#else
extern char **environ;
#endif
#include "fcgi_stdio.h"
static void PrintEnv(char *label, char **envp)
{
printf("%s:<br>\n<pre>\n", label);
for ( ; *envp != NULL; envp++) {
printf("%s\n", *envp);
}
printf("</pre><p>\n");
}
int main ()
{
char **initialEnv = environ;
int count = 0;
while (FCGI_Accept() >= 0) { //判断是否有请求产生
char *contentLength = getenv("CONTENT_LENGTH");
int len;
printf("Content-type: text/html\r\n"
"\r\n"
"<title>FastCGI echo</title>"
"<h1>FastCGI echo</h1>\n"
"Request number %d, Process ID: %d<p>\n", ++count, getpid());
if (contentLength != NULL) {
len = strtol(contentLength, NULL, 10);
}
else {
len = 0;
}
if (len <= 0) {
printf("No data from standard input.<p>\n");
}
else {
int i, ch;
printf("Standard input:<br>\n<pre>\n");
for (i = 0; i < len; i++) {
if ((ch = getchar()) < 0) {
printf("Error: Not enough bytes received on standard input<p>\n");
break;
}
putchar(ch);
}
printf("\n</pre><p>\n");
}
PrintEnv("Request environment", environ);
PrintEnv("Initial environment", initialEnv);
} /* while */
return 0;
}
这个demo很简单 核心代码 FCGI_Accept() 判断是否有请求产生 接下的就是写简单的业务逻辑。
Android编程体验
当今Mobile OS 虽四足鼎立, 但windows mobile 传统优势正在消失, Symbian颇显老矣, iPhone OS 秉承苹果一贯的作风高高在上,唯有Google Android还算比较优质兼平民,这点从G4就可以看出。
以前倒腾过windows mobile的编程,再看看现在的android编程真是相差蛮多的。虽然两者都是基于java编程。Android更能体现java高度配置的特性。
Android的编程环境搭建也比较容易
安装:
1 android-sdk-windows
2 Eclipse + ADT
Android的编程过程比较人性化 以下是重点
重要配置:
— layout 界面布局文件
Main.xml 界面核心XML配置
…… 其它更能界面配置
— values 变量定义文件夹
Strings.xml 可以理解为程序的语言包配置文件
— AndroidManifest.xml 十分重要的活动控制中枢 如对话框等活动都要向它登记 比较强势的文件
以下的我的一个例子截图

当delphi ide 从Borland 过户到Embarcadero之后delphi 2010 就是Embarcadero的拳头产品。从delphi 2010的界面到程序布局,都有jbuilder的影子,或者说是更贴近主流IDE。不过和2007比起来,现在还是有点不太习惯。

要delphi 2010 验证码(KEY)的可以联系我。
之前的im机器人是用c的system调用shell的curl来实现数据传送。测试了两天感觉上不是很舒服。决定调整为c的libcurl API发送数据。
就这个小小的调整,涉及到一堆的修改。
最主要的如下:
1 制作 curl发送的动态链接库 so文件
2 修改im机器人的makefile 文件
curl 发送的so动态连接库:
curl_so_head.h
#include “stdio.h”
#include “curl/curl.h”
#include “stdlib.h”
#include “string.h”
#include “dlfcn.h”
void c2(char *msg,char *from,char *robot); // 设置了msg:消息 from:来源 robot:机器人类型
curl_so.c
#include “curl_so_head.h”
void c2(char *msg,char *from,char *robot)
{
CURL *curl;
CURLcode res;
char *s=”&msg=”;
char *s1=”&from=”;
char *s2=”&robot=”;
char pp[200];
strcpy(pp,s);
strcat(pp,msg);
strcat(pp,s1);
strcat(pp,from);
strcat(pp,s2);
strcat(pp,robot);
curl = curl_easy_init();
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL,”http://xxxx.xxx.xxx.php”);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,pp);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
}
这个是发送调用程序:
void *SoLib;
int (*So)();
SoLib=dlopen(“so_curl.so”,RTLD_LAZY); //so_curl.so是上面操作生成的so文件
So = dlsym( SoLib, “c2″);
(*So)( msg,from,robot); //msg,from,robot表示需要的 消息 来源 robot 机器人类型
修改makefile文件 主要是要在 gcc 后面加上 -ldl 参数 .
ok 目前这项应用就到此吧。后期可能还要加新东西。
最近的一个程序因为比较复杂,需要自己编写so动态链接库来给c语言程序调用。
下面就简单的写下so制作到调用的整个流程。
首先做个头文件
head.h:
- /*
- head.h
-
- */
- #include <stdio.h>
- #include <stdlib.h>
- void method_1(); //未设置参数
- void method_2(char *s); // 设置了一个参数
method_1.c:
- /*
- method_1.c
- */
- #include "head.h"
- void method_1()
- {
- printf("我是陈毓端,您执行的是方法1(method_1)");
- }
method_2.c
- /*
- method_2.c
- */
- #include "head.h"
- void method_2(char *s)
- {
- printf("我是陈毓端,您执行的是方法2(method_2):%s",s);
- }
关键一步,生成so(动态链接库)
gcc head.h method_1.c method_2.c -fPIC -shared -o method.so
到现在 method.so 文件已经制做完毕。
接下来是调用
work_so.c
- #include "stdio.h"
- #include "stdlib.h"
- #include "dlfcn.h"
- int main()
- {
- void *SoLib;
- int (*So)();
- SoLib=dlopen("./method.so",RTLD_LAZY); //加载method.so
- So = dlsym( SoLib, "method_1"); //声名method_1方法
- (*So)( "" ); //执行method_1方法
-
- So = dlsym(SoLib, "method_2");
- (*So)( "method_2" ); //设置参数
- }
编译 :
- gcc work_so.c -o word_so -ldl
不出意外 结果为:
我是陈毓端,您执行的是方法1(method_1)我是陈毓端,您执行的是方法1(method_2):method_2
好了这个流程完毕。
文字滚动效果在手机上也是很常见的 j2me简单的文字滚动效果实现:
- Ticker ticker1 = new Ticker("我是陈毓端,一个80后碌碌无为的程序员....");
-
- firstScreen.setTicker(ticker1);
其中firstScreen 表示之前定义的屏幕对象
效果:

