extern

Delphi对于文件的读写操作

假装没事ソ 提交于 2020-04-04 01:13:23
delphi文件操作 取文件名 ExtractFileName(FileName); 取文件扩展名: ExtractFileExt(filename); 取文件名,不带扩展名: 方法一: Function ExtractFileNameNoExt(FileString: String): String; Var FileWithExtString: String; FileExtString: String; LenExt: Integer; LenNameWithExt: Integer; Begin FileWithExtString := ExtractFileName(FileString); LenNameWithExt := Length(FileWithExtString); FileExtString := ExtractFileExt(FileString); LenExt := Length(FileExtString); If LenExt = 0 Then Begin Result := FileWithExtString; End Else Begin Result := Copy(FileWithExtString,1,(LenNameWithExt-LenExt)); End; End; 方法二: ChangeFileExt

C#在winform中调用系统控制台输出

别来无恙 提交于 2020-04-01 01:21:56
在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示。 所以就会想,能不能调用系统的Cmd窗口输出呢,经过一番查阅,发现是可以的,现在就把方法写下了: 主要用到的是win32 API函数实现的: 1 [DllImport("kernel32.dll")] 2 static extern bool FreeConsole(); 3 [DllImport("kernel32.dll")] 4 public static extern bool AllocConsole(); 在Program.cs文件中调用方法即可 完整代码: 1 using System; 2 using System.Collections.Generic; 3 using System.Windows.Forms; 4 using System.Runtime.InteropServices; 5 6 namespace XY.WinformDebug 7 { 8 static class Program 9 { 10 [DllImport("kernel32.dll")] 11 static extern bool FreeConsole(); 12 [DllImport("kernel32.dll")] 13 public

c# 海康威视 Winform播放mp4视频

南笙酒味 提交于 2020-03-31 06:30:13
最近有个视频播放系统,需要对海康的mp4格式视频进行播放,由于普通播放器无法对该视频进行播放原因是海康对视频进行了自己的编码,需要相应的解码才可以对视频进行播放。 下面是对海康威视视频播放的c#代码(需要从海康官网下载播放库)。 一,这个是核心库通过c#对海康提供的动态链接库dll方法的封装。 1 public class PlayCtrlSDK 2 { 3 #region 解码库 4 [SecurityCritical] 5 [DllImport("PlayCtrl.dll")] 6 public static extern uint PlayM4_GetLastError(int nPort); 7 /// <summary> 8 /// 获取文件当前播放位置(百分比)。 9 /// </summary> 10 /// <param name="nPort"></param> 11 /// <returns></returns> 12 [SecurityCritical] 13 [DllImport("PlayCtrl.dll")] 14 public static extern float PlayM4_GetPlayPos(int nPort); 15 /// <summary> 16 ///设置文件当前播放位置(百分比)。 17 /// </summary> 18 ///

C++ Primer Summary 02

孤人 提交于 2020-03-30 16:12:29
标识符:变量名,即变量的标识符;C++中的标识符都是大小写敏感的。 初始化:复制初始化和直接初始化。直接初始化效率更高。 初始化不是赋值:初始化既创建变量又赋初始值,赋值则是擦除对象的当前值并用新值代替。 系统有时候会帮我们初始化变量,系统提供什么样的值取决于变量的类型以及定义的位置。 未初始化的变量引起运行问题:可能会导致程序错误执行和/或错误计算,问题出在未初始化的变量事实上都有一个值,编译器指定变量的内存地址,该地址原有数值依然存在。建议每个内置类型的对象都要初始化。 声明和定义:声明用于向程序表明变量的类型和名字。定义也是声明。但声明不是定义。可以使用extern声明变量。 extern int i;//declares but not define i int i;//declares and define i extern double i = 0;//definition C++语言中,变量必须且仅能定义一次。 变量名相同,在局部作用域中局部变量会屏蔽全局变量。 函数外部的名字具有全局作用域。类作用域、命名空间作用域、语句作用域、局部作用域。 const限定符把一个对象转换成一个常量,定义const对象时必须初始化。 const对象默认为文件的局部变量。与其他变量不同,除非特别说明,在全局作用域声明的const变量是定义该对象的文件的局部变量。此变量只存在于那个文件钟

extern关键字

醉酒当歌 提交于 2020-03-28 16:38:40
extern关键字有两个作用 一、告知编译器:当extern与“c”一起使用的时候,就是告诉编译器,下面的函数或者变量以C语言的方式编译。这里主要是因为一方面我们可以使用C语言写成的项目运用到C++中,另一方面由于C++支持重载而C不支持,这就导致了C++在编译的时候,C++的函数名会和参数一起被编成函数名,而C只是函数名。所以在链接的时候,找不到我们定义的那个函数。 1 //模块A头文件 moduleA.h 2 #idndef _MODULE_A_H //对于模块A来说,这个宏是为了防止头文件的重复引用 3 #define _MODULE_A_H 4 5 int foo(int x, int y); 6 #endif  //模块B实现文件 moduleB.cpp #include"moduleA.h" foo(2,3);  上面的两个模块如果用C++编译以后,那我们的obj文件的模块A的foo函数的函数名可能是_foo_int_int(每个编译器的值不同),但是模块B的函数名是_foo,这样我们去找A的话是找不到,所以就会有错误。 1 //moduleA头文件 2 #ifndef __MODULE_A_H //对于模块A来说,这个宏是为了防止头文件的重复引用 3 #define __MODULE_A_H 4 int fun(int, int); 5 #endif 6 7 /

C++项目中的extern \"C\" {}

浪尽此生 提交于 2020-03-23 13:12:09
引言 在用C++的项目源码中,经常会不可避免的会看到下面的代码: #ifdef __cplusplus extern "C" { #endif /*...*/ #ifdef __cplusplus } #endif 它到底有什么用呢,你知道吗?而且这样的问题经常会出现在面试or笔试中。下面我就从以下几个方面来介绍它: 1、#ifdef _cplusplus/#endif _cplusplus及发散 2、extern "C" 2.1、extern关键字 2.2、"C" 2.3、小结extern "C" 3、C和C++互相调用 3.1、C++的编译和连接 3.2、C的编译和连接 3.3、C++中调用C的代码 3.4、C中调用C++的代码 4、C和C++混合调用特别之处函数指针 1、#ifdef _cplusplus/#endif _cplusplus及发散 在介绍extern "C"之前,我们来看下#ifdef _cplusplus/#endif _cplusplus的作用。很明显#ifdef/#endif、#ifndef/#endif用于条件编译,#ifdef _cplusplus/#endif _cplusplus——表示如果定义了宏_cplusplus,就执行#ifdef/#endif之间的语句,否则就不执行。 在这里为什么需要#ifdef _cplusplus/#endif

进程守护

时光怂恿深爱的人放手 提交于 2020-03-23 11:13:53
private class SetPID { public delegate void SETPID(uint iPID); [DllImport("kernel32", CharSet = CharSet.Ansi, ExactSpelling = true, SetLastError = true)] public static extern SETPID GetProcAddress(IntPtr hModule, string procName); } [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern uint GetCurrentProcessId(); private delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); [DllImport("kernel32", CharSet = CharSet.Ansi, SetLastError = true, ExactSpelling = true)] private static extern HookProc GetProcAddress(IntPtr hModule, string procName);

北航软工结对项目

倾然丶 夕夏残阳落幕 提交于 2020-03-22 18:13:45
结对项目 项目 内容 本作业属于北航 2020 年春软件工程 博客园班级连接 所属教学班 006 本作业是本课程结对项目作业 作业要求 我在这个课程的目标是 收获团队项目开发经验,提高自己的软件开发水平 这个作业在哪个具体方面帮助我实现目标 体验结对编程 项目代码 Github 仓库 需求分析 与上一次的个人项目作业相类似,本次的任务关键在于交点的求解。至于新需求“交点绘制”,是简单扩展,实际上是将每个交点的坐标反馈到用户。 本次任务增加了两种图形:线段与射线,它们都是特殊的直线。为什么是特殊的“直线”呢?因为本质上,这两种图形都是将无限长直线进行截断而形成的。 由于这种性质,我们不难发现,整体的求解过程几乎没有改变。上一次的求解划分方法抄录如下 直线与直线 平行:交点个数 0 同一条直线:交点个数无限 相交:交点个数 1 直线与圆 相离:交点个数 0 相切:交点个数 1 相交:交点个数 2 圆与圆 相离:交点个数 0 相切:交点个数 1 相交:交点个数 2 内含:交点个数 0 但是,射线与线段毕竟不是直线,因此我们需要考虑因截断带来的影响,即所求得的交点是否在图形上。而求解交点的过程,依旧是参见 Paul Bourke 先生的 文章 。 除此以外,我们还需要考虑射线与线段之间的新的交点,即端点的重合。 根据上述分析过程,不难得到所需的实体,UML 图如下(使用 StarUML

GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在G

十年热恋 提交于 2020-03-20 10:28:44
本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点: inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。 从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任何作用了。所以inline关键字不应该出现在函数声明 中,没有任何作用不说,有时还可能造成编译错误(在包含了sys/compiler.h的情况下,声明中出现inline关键字的部分通常无法编译通 过); inline 关键字仅仅是建议编译器做内联展开处理,而不是强制。在gcc编译器中,如果编译优化设置为-O0,即使是inline函数也不会被内联展开,除非设置了强制内联(__attribute__((always_inline)))属性。 1. GCC 的 inline gcc对C语言的inline做了自己的扩展,其行为与C99标准中的inline有较大的不同。 1.1. static inline GCC 的static inline定义很容易理解:你可以把它认为是一个static的函数,加上了inline的属性

2.extern关键字的总结(未完)

非 Y 不嫁゛ 提交于 2020-03-19 01:28:40
2.1.定义与声明,初始化和赋值 (1)定义:负责创建与名字关联的实体。 //声明变量a(当前文件中), 并且定义a int a = 5; (2)声明:使得名字为程序所知,用别处的定义的名字必须包含声明(比如其他文件的定义) //声明a,并非定义 extern int a; (3)声明中给予初始值 //定义a extern int a = 5; 但是,有例外 1 //错误,不允许在函数内部这样做 2 void Test() { 3 //定义a 4 extern int a = 5; 5 } (4)初始化:从无到有的过程,先分配空间,然后再填充数据; 赋值:对已有的对象进行操作。 1 //将a初始化为5 2 int a=5; 3 //将a赋值为6 4 a=6; 2.2.extern的各种用法 (1)extern:可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 (2)extern修饰变量 一种常见的错误 //在test1.cpp中有如下 int array[6]; //在test2.cpp中有如下 extern *array; array[]是指向int类型的数组,test2.cpp中的声明是指向int类型的指针,两者区别很大。 一种常见的应用