使用directX 7结合C#进行2D游戏编程

2023-05-16

使用directX 7结合C#进行2D游戏编程

前言

对于C#的开发人员来讲,GDI+ 是一个拥有丰富的绘图API指令、传统、高效的程序集。但不幸的是,你要想用她来开发一个复杂而又平滑的动画的时候,我们会发现GDI+只能做到有限的快。因此,它是绝不适合做游戏开发;不要妄想你那飞快的处理器和崭新的、长着奇异形状的图形卡,到DirectX API来。

不幸的是,.net和C#并非DirectX的官方开发平台,但是DirectX 9可利用.net平台做为其标准开发平台,我们只需引用他的命令空间就可以了。不过我们要以利用VB7、8的DirectX组件在C#中进行开发。本文将利用一个简单的突围风格的游戏(我突发奇想的叫她做"太空突围")来示范在C#环境下,如何利用VB的DirectX的组件进行开发。

DirectX 和 DirectDraw

DirectX 8 之前,DirectDraw是DirectX的主要2D接口。自从windows主流的游戏编程偏离平面游戏时,Mircrosoft决定将2D和3D的API原理合并,新的接口称为DirectGraphics。这样做非常有好处,因为如果你想开发纯2D的游戏,哪他将没有任何3D的加速,这样总有些不好吧,大大的不好:-

l DirectGraphics需要一张3D加速卡做为2D的硬件加速

l DirectGraphics可直接绘制2D图形。DirectDraw则需要了解一些3D的概念

所以当开发纯2D游戏时依然可以首要考虑DirectDraw,在DirectX 8下依然可以建立DirectX 7(提供DirectDraw的版本)的对象。

设置DirectX程序

进行.net的DirectX开发,首先引用DirectX的COM dll文件。如何加入引用?在"项目"菜单中选择"添加引用",选择"COM",如果你已经安装了DirectX 7、8,你就能在"组件名称"中找到"DirectX 7 for Visual Basice Type Library"或"DirectX 8 for Visual Basice Type Library"。"选择"他们。DirectX程序在.net中必须基于winForm程序,所以,下一步要建立一个基本的无边框的winForm。

初始化DirectX

在《太空突围》的主DirectX对象及他们的初始化封装在GameDirectDrawClass类中。DirectDraw有两种显示模式:全屏和窗口模式。在DirectDraw的游戏开发中,全屏模式是最常用的,他可在游戏的全程独占屏幕作为用户的界面,他对故事的演绎、用户的投入程度,都要好优于windows模式。以下变量是GameDirectDrawClass类用于初始化全屏模式的(全文我都假定你已经在文件的头部加入了"using DxVBLib;"的语句)。

private DirectX7 m_objDirectX = new DirectX7();
private DirectDraw7 m_objDirectDraw;
private DirectDrawSurface7 m_objPrimarySurface;
private DirectDrawSurface7 m_objBackBufferSurface;
private DDSURFACEDESC2 m_objPrimarySurfaceDescription;
private DDSURFACEDESC2 m_objBackBufferSurfaceDescription;


变量m_objDirectX是游戏DirectX主对象的一个实例,另预先准备m_objDirectDraw是游戏主DirectDraw对象的一个实例。另两年变量(m_objPrimarySurface 和 m_objBackBufferSurface)是DirectDraw的Surface,所谓Surface就是代表我们实际作图的平面、纸张,就象GDI+的图形对象一般。

每个DirectDraw 程序都必须有最少一个Surface对象。Surface指向的是物理显存。经常的做法是建立一个主surface对象,这里是m_objPrimarySurface变量。除主surface对象之外,应有一些不显示的surface存在于内存中。作为第二种surface变量我们通常称为后缓存(m_objBackBufferSurface)。

后缓存surface在程序中是作为双重缓冲。双重缓冲的过程是这样的:我们在第二个surface中进行的一个帧的所有的绘图(译者:我们应有一个概念:每个surface就是动画中的其中一帧),当所有绘图动作完成后就可以将整个缓冲区拷贝到主surface。DirectDraw全屏下进行这种整页的拷贝工作称为page flipping(译者:我也喜欢将其译为"页翻转")。当页翻转时,主surface将指向BackBufferSurface的内存地址,而BackBuffer将指向主surface原指向的地址。这样一来,主surface包含Backbuffer的内容,BackBuffer对象也包含着主surface的内容。一次页翻转后,BackBuffer就会清掉缓存的内容,并进行下一帧的绘图工作。图2说明了这个过程。


这剩下的两个变量m_objPrimarySurfaceDescription、m_objBackBufferSurfaceDescription是用来设置一些道具的surface,将在下面详述。

InitialiseDirectXFullScreen()方法是GameDirectDraw类的用于初始化DirectDraw对象的。他有一个整形的参数,指向一个表单的句柄(handle)。代码如下:

InitialiseDirectXFullScreen(int objDisplayFormHandle)
{

m_objDirectDraw = m_objDirectX.DirectDrawCreate("");

m_objDirectDraw.SetCooperativeLevel (objDisplayFormHandle, CONST_DDSCLFLAGS.DDSCL_FULLSCREEN | CONST_DDSCLFLAGS.DDSCL_EXCLUSIVE);

m_objDirectDraw.SetDisplayMode(640, 480, 16, 0, CONST_DDSDMFLAGS.DDSDM_DEFAULT);

m_objPrimarySurfaceDescription.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS | CONST_DDSURFACEDESCFLAGS.DDSD_BACKBUFFERCOUNT;

m_objPrimarySurfaceDescription.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE |CONST_DDSURFACECAPSFLAGS.DDSCAPS_FLIP | CONST_DDSURFACECAPSFLAGS.DDSCAPS_COMPLEX;

m_objPrimarySurfaceDescription.lBackBufferCount = 1;

m_objPrimarySurface = m_objDirectDraw.CreateSurface(ref m_objPrimarySurfaceDescription);
DDSCAPS2 ddscaps = new DDSCAPS2();
ddscaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_BACKBUFFER;

m_objBackBufferSurfaceDescription = m_objPrimarySurface.GetAttachedSurface(ref ddscaps);
m_objBackBufferSurfaceDescription(ref m_objBackBufferSurfaceDescription);

}


在代码的第一行,建立了一个DirectX 7的对象。这DirectDraw对象调用了一次SetCooperativelevel()方法,设置DirectDraw对象与操作系统联合(co-operation)的水平。第一个参数是程序要用的form的句柄,第二个参数包含着一些标记(flags),指示程序所需的联合水平。这里我们用了两个标记,我们既要全屏又要独占显示控制。

下一个DirectDraw方法是SetDisplayMode()。他是用于设置屏幕属性,头两个参数指定分辨率为640*480,第三个指定为16Bit色,第四个是刷新率(这里设为0,DirectDraw将自动使用最好的分辨率)第五个指定没有高级分辨率使用(no advanced resolutions are to be used不明白)。

跟着的是对主surface 的描述变量(descriptor)的赋值,这变量将用来建立主surface。我们指定的这些标记将用来指定surface的容量和他的缓冲数,利用的是lflags的属性。下一行定义了surface的能力。头一变量指定了这将要是一个主surface,跟着的变量指定我们将要使用"页翻转",这最后的变量是我们使用"页翻转"而特定需要的。下一行定义了surface的缓冲数,这里指定了一个。定义设好后,我们利用DirectDraw对象的CreateSurface()方法建立主surface,该方法需要一个指向"描述变量"的参数。

当主surface建立后,BackBuffer也能建立了。我们设置相同的属性给BackBuffer的描述变量,并指定为一个后缓冲surface,于是我们就用主surface对象的GetAttachedSurface()方法建立这个BackBuffer。

显示位图

在DirectDraw中,位图必须加载到新的surface然后拷贝到BackBuffer。在游戏中,许多位图绘制代码都封装在抽象类BitmapObject中,所有游戏对象都继承自该抽象类。主变量使用BitmapObject类来建立位图对象,并把位图绘制在Backbuffer。

public const int BLACK_TRANSPARANT_SPRITE = 1;
public const int NORMAL_BITMAP = 0;

protected DDSURFACEDESC2 m_objDDSurfaceDescription;
private DirectDrawSurface7 m_objBitmapSurface;

protected RECT m_objSizeRECT;


前两行定义的两个常数用以区分对象是组图(sprite)还是位图。组图是指一些不规则的小图。另,m_objDDSurfaceDescription是一个surface的描述对象,用以为设置surface对象属性服务,m_objBitmapSurface是一个DirectDraw的surface对象,他代表着一个位图。剩下变量是一个RECT结构,是个矩形结构,他代表着surface的方形区域,surface用于拷贝缓冲区信息。

InitialiseSurfaceDescription(int intBitmapWidth, int intBitmapHeight) {

m_objDDSurfaceDescription.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS | CONST_DDSURFACEDESCFLAGS.DDSD_WIDTH | CONST_DDSURFACEDESCFLAGS.DDSD_HEIGHT;

m_objDDSurfaceDescription.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN;

m_objDDSurfaceDescription.lWidth = intBitmapWidth;

m_objDDSurfaceDescription.lHeight = intBitmapHeight;

m_objSizeRECT.Bottom = intBitmapHeight;

m_objSizeRECT.Right = intBitmapWidth;

}


方法的第一行代码设置surface的描述对象的lFlags属性,他指定的性质将用于设置surface的属性、宽、高。跟着的代码设置了另surface的性质,这surface是非显示surface。一个非显示surface是指存在于内存中,而自身不显示给用户。接着的两行设置了surface的宽、高。最后两行设置一个RECT结构的宽、高。

每次surface的建立都要进行surface描述对象的设置,我们将这些代码放在了InitialiseSurface()方法中。这方法有三个参数,程序的DirectDraw对象、一个指向一个位图的字符串、一个整数(指针)指向将在被建立的位图、组图。方法代码如下:

InitialiseSurface(DirectDraw7 DirectDraw, string strBackgroundBitmap, int intBitmapType)
{
try
{
m_objBitmapSurface = DirectDraw.CreateSurfaceFromFile( strBackgroundBitmap,
ref m_objDDSurfaceDescription );

}
catch ( Exception e)
{
System.Windows.Forms.MessageBox.Show( "Unexpected exception: " + e.ToString(), "Unexpected Exception" );

System.Windows.Forms.Application.Exit();
}

switch (intBitmapType)
{

case BitmapObject.BLACK_TRANSPARANT_SPRITE:

DDCOLORKEY objBlackKey;

objBlackKey.low = 0; objBlackKey.high = 0;
m_objBitmapSurface.SetColorKey( CONST_DDCKEYFLAGS.DDCKEY_SRCBLT, ref objBlackKey);
break;
}

}


前一部分代码是利用一个位图文件来建立surface对象,他使用了DirectDraw对象的CreateSurfaceFromFile()方法。CreateSurfaceFromFile()有两个参数,一个是文件的字符串,另一个是需处理的surface的描述对象。

后一部分代码用于建立组图(sprite)。我早前说过,组图是不规则的一此小图,不幸的是,位图文件只能是方形的,所以DirectDraw只有将方形的图形转变成组图。过程是这样的:首先为surface定义一个颜色值,当surface装载到另一个surface时,DirectDraw将位图的什么该值颜色的位置换为透明。这游戏所有组图都用黑色值,第一行代码建立一个DirectDraw颜色对象,下两行定义了黑色中最高、最低值。接着调用位图surface对象的SetColorKey()。

DDCKEY_SRCBLT: 
Color key or color space to be used as a source color key for blit operations. 

source color key:
A color that (in the case of blitting) is not copied to, or (in the case of overlays) not visible on, the destination。

destination color key:
The color that (in the case of blitting) is replaced or (in the case of overlays) is covered on the destination surface.

位图surface建立后,就可加载到BackBuffer中,这种由一surface信息覆盖到另一surface的过程我们称之为"blitting"---"bit block transfer"(我称其为"字组转移")。为了字组转移我们定义BltFast()方法,以下是BltFast()的代码,用于从BitmapObject类转移组图到Backbuffer。

objBackBufferSurface.BltFast( this.XPosition, this.YPosition, m_objBitmapSurface, ref m_objSizeRECT, CONST_DDBLTFASTFLAGS.DDBLTFAST_SRCCOLORKEY | CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT );


第一个参数指出组图将要放的点距BackBuffer左边的点值,第二个参数是该点距Backbuffer顶边的点值;第三个参数是组图对象,第四个是定义了转移的区域大小的RECT结构,最后一个参数是转移的标志,这里所用的两个标志指明了我们要使用指定对象颜色值和DirectDraw必须要等待方法完成转换后才进行下一步的工作。

翻转BackBuffer到主surface

一个帧的所有位图转换完成后,BackBuffer就需要将其自身翻转到主surface。这项工作由GameDirectDraw类的FlopBackBufferAndPrimary()方法完成。该方法只有一行代码。

this.PrimarySurface.Flip(this.BackBufferSurface, CONST_DDFLIPFLAGS.DDFLIP_WAIT);


正如我们所看到的,主surface对象的Flip()方法被调用,他需要两年参数。第一个是BackBuffer对象,第二个要求DirectDraw等待翻转的完成。一次翻转完成,BackBuffer就会清除自身内容并进行下一个动画的转移。

Conclusion

This article has detailed the core elements of building a game using DirectX and DirectDraw. DirectX is a huge topic but it is hoped that in conjunction with the source code for the Space Breakout game youll have all you need to begin building your own 2D DirectX games.

译:

结论

本文详述了DirectX和DirectDraw建立一个游戏的主要原理。DirectX是一个庞大的话题,但我希望大家认真研究"空间突围"的代码,你将会学会开发DirectX 2D游戏所需要的知识。

http://www.cnblogs.com/ww21xx/articles/93740.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用directX 7结合C#进行2D游戏编程 的相关文章

  • 媒体播放器/录音机(声子)

    我想开发一个媒体播放器 录音机 主要目标平台是Windows 支持其他操作系统就更好了 但这不是一个高优先级 它应该能够播放 wav mp3 avi 等格式 它还应该能够录制音频 麦克风 和视频 网络摄像头或采集卡 由于我对 QT 和 C
  • 将 DirectX SDK 代码转换为新的 Windows 8.1 SDK 代码

    我目前正在创建一个视频游戏 引擎 我发现RasterTek 的一些非常精彩的 DirectX 11 编程教程 http www rastertek com tutdx11 html 不幸的是 他们使用了已弃用的 DirectX SDK 而我
  • 无需源代码即可调试/绕过 BSOD

    你好 祝你有美好的一天 这里需要一些帮助 情况 我有一个不起眼的 DirectX 9 应用程序 名称和应用程序详细信息与问题无关 自某些驱动程序版本以来 它会导致所有 nvidia 卡 GeForce 8400GS 及更高版本 出现蓝屏死机
  • 在 DirectX 中显示视频

    在使用 XAudio2 和 Direct3D9 10 的应用程序中显示视频 带声音 的最佳 最简单方法是什么 至少它需要能够传输可能更大的视频 并考虑到窗口宽高比可能与视频不同的事实 例如通过添加信箱 尽管理想情况下我希望能够将视频嵌入到3
  • 如何在 C# 中获取向量类型?

    我想在我正在编写的 C 应用程序中使用向量 特别是 Vector3 对于我来说 无需编写自己的向量类型 最好的方法是什么 我在 POC 中使用了一个我发现的代码项目 http www codeproject com KB recipes V
  • 错误 LNK2019:函数 ___tmainCRTStartup 中引用了无法解析的外部符号 _wWinMain@16

    我开始使用 DirectX 11 并收到以下编译错误 错误 1 错误 LNK2019 无法解析的外部符号函数 中引用了 wWinMain 16 tmainCRT启动 错误 2 error LNK1120 1 unresolved exter
  • 如何检测 WPF 控件何时被重绘?

    我正在使用 D3DImage 显示一系列帧 这些帧依次渲染到同一个 Direct3D Surface 上 我目前的逻辑是 显示最后渲染的帧 即D3DImage Lock AddDirtyRect Unlock 开始渲染下一帧 等待下一帧准备
  • 创建交换链失败

    我正在关注 DX 示例和 MSDN 参考 但现在遇到了困难 我从 D3D11CreateDeviceAndSwapChain 获取 E InvalidArg 的 HRESULT 我知道它是我传递的 IDXGIAdapter 因为如果我将其更
  • 在 Windows 桌面上制作 3D 对象动画

    我需要在 Windows 桌面上绘制用户可以与之交互的 3D 对象 例如狗 并为其设置动画 用户交互假设点击 显示 不规则形状 对话框以供用户输入等 您知道实现这一目标的具体方法吗 我想我有几种选择 有什么建议吗 哪一种最好 最简单 WPF
  • 使用 DX Compositor 的 UWP 应用程序实时模糊背景

    因此 UWP 合成支持已经有一段时间了 我正在寻找一种对元素进行实时模糊的方法 在移动或加载时进行实时模糊 而不是静态快照 到目前为止 我一直在 stackoverflow 和 google 上查看一些答案 这导致我使用Lumia 成像 S
  • WARP 驱动程序、参考驱动程序和软件驱动程序之间有什么区别?

    在 DirectX 11 中 有四种类型的驱动程序 D3D DRIVER TYPE HARDWARE D3D DRIVER TYPE REFERENCE D3D DRIVER TYPE SOFTWARE D3D DRIVER TYPE WA
  • 为什么OpenGL最初要设计成状态机?[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 Direct2D 高效地将像素写入屏幕

    我有一个像素数组 m pixels 我想使用 Direct2D 将其渲染到屏幕上 该数组包含 10 000 个元素 100 行 每行 100 个像素 下面的代码循环遍历像素并将它们作为 10x10 矩形绘制到屏幕上 有没有更有效的方法来执行
  • 在 DirectX 中创建和使用纹理

    我正在尝试使用代码创建纹理 将其转换为着色器资源视图 然后将其应用到平面 但是我得到的只是一个黑色方块 我尝试使用 msdn 上的示例代码无济于事 还尝试使用 unsigned char 和 float float 如下所示 因为这就是我需
  • DX11 中的顶点缠绕顺序

    我试图用 dx11 绘制一个简单的正方形 但每个三角形的索引顺序决定了它是否显示 我在光栅化状态下将剔除模式设置为无 但它似乎没有改变任何东西 如果我将第一个三角形的顶点指定为 0 1 2 而不是 2 1 0 则该三角形不会显示 所以我的问
  • 在 C# WPF 或 Windows 窗体应用程序中使用 DirectX c++ DLL

    我用c 编写了一个DX11渲染器 我现在正在寻找一种方法来实现它的编辑器 GUI 由于我非常习惯 Windows 窗体和 WPF C 应用程序 因此我正在考虑将渲染器放入 dll 中 从 C 应用程序加载 dll 并使用它绘制到表单的定义部
  • 使用 C# 截取任何外部应用程序的屏幕截图

    我们有一个 C WPF 应用程序 我们想要在其中截取我们启动的任意应用程序的屏幕截图 即 我们可以引用我们启动的进程 应用程序可能已最小化或位于其他窗口后面 但我们仍然只需要单个应用程序的图像 而不是重叠像素 我知道使用 BitBlt 或的
  • 如何捕获正在播放的音频?

    有谁知道如何以编程方式捕获正在播放的声音 即来自声卡的所有声音 而不是麦克风等输入设备 假设您正在谈论 Windows 则基本上可以通过三种方法来实现此目的 首先是打开音频设备的主输出作为录音源 这只有在驱动程序支持时才可能实现 尽管现在大
  • FFMPEG 帧到 DirectX 表面

    给定一个指向 FFMPEG 的 AVFrame 的指针avcodec decode video 函数如何将图像复制到 DirectX 表面 假设我有一个指向适当大小的 DX X8R8G8B8 表面的指针 Thanks John 您可以使用
  • 如何从 IDWriteFontFace 创建 IDWriteTextFormat

    我正在创建 W8 C CX DirectX 应用程序 并且尝试使用应用程序自己的存储中的自定义字体文件 我弄清楚如何使用IDWriteFactory CreateFontFileReference加载ID写入字体文件从目录然后如何创建ID写

随机推荐

  • MFC中绘制动态曲线

    在工控监测领域 xff0c 经常需要动态绘制曲线 xff0c 观察曲线的变化趋势 xff0c 绘制波形图 xff0c 绘制频谱等 在前面4讲中介绍了MFC经常用的 TeeChart 控件和 Hight Speed Chart Ctrl xf
  • c++ 如何获取系统时间

    DoubleSnake 转载http blog csdn net zjnig711 article details 2419081 c 43 43 如何获取系统时间 2008 04 28 15 34 方案 优点 xff1a 仅使用C标准库
  • Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.... 此错误的解

    调用DLL里的函数 或 类成员函数 碰到此错误 xff1a Run Time Check Failure 0 The value of ESP was not properly saved across a function call Th
  • dll动态库调用约定

    1 动态链接库英文为DLL xff0c 是Dynamic Link Library 的缩写形式 xff0c DLL是一个包含可由多个程序同时使用的代码和数据的库 xff0c DLL不是可执行文件 动态链接提供了一种方法 xff0c 使进程可
  • C++ 事件编程

    43 43 事件编程 在微软 NET 框架中可以定义托管类事件并用委托和 43 61 操作符处理这些事件 这种机制似乎很有用 xff0c 那么在本机 C 43 43 中有没有办法做同样的事情 xff1f Several Readers 确实
  • 回调函数是什么

    回调函数 程序员常常需要实现回调 本文将讨论 函数指针的基本原则并说明如何使用函数指针实现回调 注意这里针对的是普通的函数 xff0c 不包括完全依赖于不同语法和语义规则的类成员函数 xff08 类成员指针将在另文中讨论 xff09 声明函
  • 汇编语言中可以定义变量吗?怎么定义?有局部变量和全局变量之分吗?作用域是什么?

    汇编语言定义变量的格式为 变量名 变量类型 数值列表 其中 变量类型有 DB DW DD等 xff0c 分别表示变量占有的内存空间 依次为1 xff0c 2 xff0c 4个字节 如 A DB 1 2 3 4 就定义了名称为A的4个占1个字
  • 对比commonjs和ES6

    总结 xff1a xff08 1 xff09 es6模块化就是通过export关键字进行分别导出 xff0c 通过 export 变量标识符1 xff0c 变量标识符2 进行统一导出 xff0c 通过 export defalt key v
  • 如何使用C#自带的GDI+双缓冲类BufferedGraphics实现双缓冲功能

    小白摸索着编写一个上位机界面 xff0c 将遇到的问题及解决方法记录下 xff0c 以供后来的小白使用哈 这篇文章解决的问题是在绘图时候的闪烁问题 其中网上有些介绍的设置控制方式controlstyle的方法 xff0c 这个方法我的理解是
  • c++中vector的用法详解

    vector 向量 C 43 43 中的一种数据结构 确切的说是一个类 它相当于一个动态的数组 当程序员无法知道自己需要的数组的规模多大时 用其来解决问题可以达到最大节约空间的目的 用法 1 文件包含 首先在程序开头处加上 include
  • C++中extern关键字的作用

    1 基本解释 xff1a extern可以置于变量或者函数 前 xff0c 以标示变量或者函数的定义在别的文件中 xff0c 提示编译器遇到此变量和函数时在其他模块中寻找其定义 此外extern也可用来进行链接指定 也就是说extern有两
  • 双缓冲技术绘图原理及简单的VC实现

    为了增加自己对双缓冲绘图技术的理解 xff0c 简要做个笔记 xff08 以Windows为例 xff09 xff1a 1 Windows 绘图原理 我们在 Windows 环境下看到各种元素 xff0c 如菜单 按钮 窗口 图像 xff0
  • C#中Tuple的使用

    定义 xff1a 元组是具有 特定数量和序列 的元素 的数据结构 xff08 注意断句哈 xff01 xff09 元组通常有四种使用方式 一 表示一组数据 例如 xff0c 一个元组可以表示一条数据库记录 xff0c 并且每一个分量对应表示
  • 调用C++dll

    1 dll 的优点 代码复用是提高软件开发效率的重要途径 一般而言 xff0c 只要某部分代码具有通用性 xff0c 就可将它构造成相对独立的功能模块并在之后的项目中重复使用 比较常见的例子是各种应用程序框架 xff0c ATL MFC 等
  • DLL程序入口DllMain详解

    DLL程序入口点函数 xff1a DllMain xff0c 注意 xff1a 大小写是区别的 仅导出资源的DLL可以没有DllMain函数 函数原型 cpp view plain copy print BOOL APIENTRY DllM
  • C++编写DLL的方法

    在写C 43 43 程序时 xff0c 时常需要将一个class写成DLL xff0c 供客户端程序调用 这样的DLL可以导出整个class 也可以导出这个class的某个方法 一 导出整个class 方法很简单 xff0c 只需要在类的头
  • dll文件的c++制作

    1 首先用vs2005建立一个 c 43 43 的dll 动态 链接 库 文件 xff0c 这时 xff0c DllTest cpp 定义 DLL 应用程序的入口点 include 34 stdafx h 34 include 34 Dll
  • vs2008 C++创建和调用标准DLL

    为了共享代码 xff0c 需要生成标准的dll xff0c 本文将介绍在vs2008 C 43 43 生成及调用dll 一 生成DLL 生成一个名为FunDll的dll文件 xff0c 对外函数为addl step1 vs2008 环境下
  • VSCode使用SSH免密登录服务器

    VSCode使用SSH免密登录服务器 前言一 SSH连接服务器1 1 安装ssh插件1 2 配置连接 二 免密登录服务器2 1 生成公钥2 2 服务器新建授权文件2 3 本地复制公钥到服务器 总结 前言 vscode使用remote ssh
  • 使用directX 7结合C#进行2D游戏编程

    使用directX 7结合C xff03 进行2D游戏编程 前言 对于C 的开发人员来讲 xff0c GDI 43 是一个拥有丰富的绘图API指令 传统 高效的程序集 但不幸的是 xff0c 你要想用她来开发一个复杂而又平滑的动画的时候 x