1. 如果函数只有传入参数,比如:
- //C++中的输出函数
- int __declspec(dllexport) test(const int N)
- {
- return N+10;
- }
对应的C#代码为:
- [DllImport("test.dll", EntryPoint = "#1")]
- public static extern int test(int m);
- private void button1_Click(object sender, EventArgs e)
- {
- textBox1.Text= test(10).ToString();
- }
2. 如果函数有传出参数,比如:
- //C++
- void __declspec(dllexport) test(const int N, int& Z)
- {
- Z=N+10;
- }
对应的C#代码:
- [DllImport("test.dll", EntryPoint = "#1")]
- public static extern double test(int m, ref int n);
- private void button1_Click(object sender, EventArgs e)
- {
- int N = 0;
- test1(10, ref N);
- textBox1.Text= N.ToString();
- }
3. 带传入数组:
- void __declspec(dllexport) test(const int N, const int n[], int& Z)
- {
- for (int i=0; i<N; i++)
- {
- Z+=n[i];
- }
- }
C#代码:
- [DllImport("test.dll", EntryPoint = "#1")]
- public static extern double test(int N, int[] n, ref int Z);
- private void button1_Click(object sender, EventArgs e)
- {
- int N = 0;
- int[] n;
- n = new int[10];
- for (int i = 0; i < 10; i++)
- {
- n[i] = i;
- }
- test(n.Length, n, ref N);
- textBox1.Text= N.ToString();
- }
4. 带传出数组:
C++不能直接传出数组,只传出数组指针,
- void __declspec(dllexport) test(const int M, const int n[], int *N)
- {
- for (int i=0; i<M; i++)
- {
- N[i]=n[i]+10;
- }
- }
对应的C#代码:
- [DllImport("test.dll", EntryPoint = "#1")]
- public static extern void test(int N, int[] n, [MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)] int[] Z);
- private void button1_Click(object sender, EventArgs e)
- {
- int N = 1000;
- int[] n, Z;
- n = new int[N];Z = new int[N];
- for (int i = 0; i < N; i++)
- {
- n[i] = i;
- }
- test(n.Length, n, Z);
- for (int i=0; i<Z.Length; i++)
- {
- textBox1.AppendText(Z[i].ToString()+"n");
- }
- }
这里声明函数入口时,注意这句 [MarshalAs(UnmanagedType.LPArray,SizeParamIndex=1)] int[] Z
在C#中数组是直接使用的,而在C++中返回的是数组的指针,这句用来转化这两种不同的类型.
关于MarshalAs的参数用法以及数组的Marshaling,可以参见这篇转帖的文章: http://www.kycis.com/blog/read.php?21
5. 传出字符数组:
C++定义:
- void __declspec(dllexport) test(int i, double &a, double &b, char t[5])
C#对应声明:
- [DllImport("dll.dll", EntryPoint = "test")]
- public static extern void test(int i, ref double a, ref double b, [Out, MarshalAs(UnmanagedType.LPArray)] char[] t);
- 。。。
- char[] t = new char[5];
- test(i, ref a, ref b, t);
字符数组的传递基本与4相似,只是mashalAs 时前面加上Out。
买了3年左右的 HV10最近有了点麻烦,连接1394口到电脑上居然无法识别了,更不用说传输录像.经过查看,发现有可能是摄像机的1394口有问题了.从国内买了几个1394接口,试试看能不能自己换上
6针转4针的1394转接线的针脚对应如下图示

经过万用表测量得知,6号针在摄像机那头传输中断,仔细查看可以发现,摄像机1394接口的6号针居然缩进去了一小段,就是这个造成了接触不良.看来得要换接口了.
1. 修改TEMPLATE/DEFAULT/HEADER.HTML文件,加入如下JS初始化代码:
- <script src="http://maps.google.com/maps?file=api&v=1&key=ABQIAAAAuG7oWOtWqEZB1PNN_pEvsBQ5_R83DoQvDaRjoUUcz5SOzE95uxQPI9Bh8GLJN8gz2X_Ib6OP9qcsVQ" type="text/javascript"></script>
2. 紧接着上段代码,加入以下代码, 用以定位地图,此函数中可以加入若干地图显示选项,并且在BODY中id=map_canvas的div中显示地图:
- <script type="text/javascript">
- function initialize() {
- if (GBrowserIsCompatible()) {
- var map = new GMap2(document.getElementById("map_canvas"));
- map.setCenter(new GLatLng(37.4419, -122.1419), 13);
- map.openInfoWindow(map.getCenter(),document.createTextNode("Hello, world")); //显示居中位置的标签,可惜不支持中文
- map.addControl(new GSmallMapControl());//显示控制按钮
- map.addControl(new GMapTypeControl());
- map.setUIToDefault();
- }
- }
- </script>
3. 在BODY中,加入MAP_CANVAS,并且在BODY的ONLOAD事件中调用INITIALIZE()函数:
- <body onload="initialize()" onunload="GUnload()">
- <div id="map_canvas" style="width: 500px; height: 300px"></div>
- </body>
以上只是简单的基础应用,更多应用参照GOOGLE说明,参考网址: http://www.chinesejy.com/jishu/513/551/2006062090855.html
http://code.google.com/apis/maps/documentation/overlays.html
1. 因为不可直接在网页上添加文字(UTF8编码问题), 把所有要显示的文字都放到law_plus表中.
- 在law_plus表中,添加记录,PLUSLABLE为文字标识,以"STR"打头,BODY为文字内容,支持HTML
- 在MODULE目录中,增加STRINFO.PHP文件,用于显示数据库记录,内容为:
PHP Code Copy Code To Clipboard- function getInfo($strName)
- {
- global $fsql;
- global $charset;
- global $tbl_plus;
- global $MenuInfo;
- $scl = " pluslable='str".$strName."' ";
- $fsql->query( "select * from {$tbl_plus} where {$scl} " );
- if ( $fsql->next_record( ) )
- {
- $body = $fsql->f( "body" );
- }
- return $body;
- }
- 修改includes/func/common.inc.php文件,showtemp ($EditCon) 函数,增加
PHP Code Copy Code To Clipboard
- else if ( substr( $arrayx[0], 0, 3 ) == "str" )
- {
- include_once( ROOTPATH."module/strInfo.php");
- $CodeString = getInfo(substr( $arrayx[0],3 ) );
- }
- 在任意的template文件中,增加{#strXXXXXX#}变量即可
2. 添加文章类别后在首页上显示
- 先在后台添加文章类别
- 进入phpmyadmin, 打开数据库, 查看law_plus表,
- 添加记录, 其中,
- ID依次编入,不能重复;
- MENUID=1
- pluslable = modNewsList
- plustype 和 pluslocat 都是 INDEX
- catid 可以查看其他的, 依次下来加1
- showmenuid = 84
- showmore = 更多
- modno 这个很重要, 不能有重复,一般取比最后一个modNewsList的modno值大1即可
- 以上添加完成后,在template的HTML文件中添加引用:
{#modNewsList-18#}
其中的数字18即以上的modno数字.
1. ServerRoot "D:MyServerApache2.2.9" - 通常不用变动,安装好以后的主文件所在目录,与WWW发布目录是两回事
2. Listen 80 - 80端口
3. DocumentRoot "E:rootwww" - 这个就是WWW发布主目录,修改后还要修改下面的目录属性,以<Directory "e:rootwww">开始的内容
4. Alias /phpmyadmin "D:MyServerApache2.2.9/htdocs/phpmyadmin" - 设置虚拟目录,这条语句可以紧放在目录属性之上,比如
<Directory "D:MyServerApache2.2.9/htdocs/phpmyadmin">
options none
AllowOverride None
Order allow,deny
Allow from all
</Directory>
5. 默认文档的名称
<IfModule dir_module>
DirectoryIndex index.html index.php index.htm
</IfModule>




