小编Iva*_*nov的帖子

从C++到C#的zlib(如何将byte []转换为流并将流转换为byte [])

我的任务是使用zlib解压缩数据包(已接收),然后使用算法从数据中生成图片

好消息是我有C++代码,但任务是在C#中完成

C++

        //Read the first values of the packet received

        DWORD image[200 * 64] = {0}; //used for algoritm(width always = 200 and height always == 64)
        int imgIndex = 0; //used for algoritm
        unsigned char rawbytes_[131072] = {0}; //read below
        unsigned char * rawbytes = rawbytes_; //destrination parameter for decompression(ptr)
        compressed = r.Read<WORD>(); //the length of the compressed bytes(picture)
        uncompressed = r.Read<WORD>(); //the length that should be after decompression
        width = r.Read<WORD>(); //the width of the picture
        height …
Run Code Online (Sandbox Code Playgroud)

c# byte zlib

6
推荐指数
2
解决办法
2万
查看次数

C#中按位AND的倒数是多少?

我需要做一个反向计算,它包括按位AND运算,我该怎么做?

我尝试了异或,但它没有帮助.

        int i = 254 & 2;
        Console.Write("254 & 2 ={0}", i + "\n");
        Console.Write("{0} ^ 2 ={1}",i, (i ^ 2) + "\n");
Run Code Online (Sandbox Code Playgroud)

不行.我该如何计算?

c# bitwise-operators

6
推荐指数
2
解决办法
2万
查看次数

C#理论:将一个JMP写入asm中的编解码器

让我们假设我已经分配了我的编解码器使用VirtualAllocEx的地址(它返回地址),并使用我的代码将代码写入该地址WriteProcessMemory().

这是问题:

如何写一个跳转到我的编解码器?我知道跳转以" E9" 开头,但是如何将返回的地址VirtualAllocEx转换为正确的UInt32(dword),以便调试器/编译器能够理解指令?

例如:

我在地址00402020(原生应用程序的OEP).我写了一个跳转到004028CF(空地方)" JMP 004028CF".以字节为单位的指令如下所示:

CPU Disasm
Address   Hex dump      Command                                  Comments
00402020  E9 AA080000   JMP 004028CF
Run Code Online (Sandbox Code Playgroud)

" E9"是我们如何表明JMP.怎么样" AA080000",我该如何生成呢?

我需要做类似的事情,所以我可以将JMP初始化为我的codecave,它将位于返回的地址VirtualAllocEx().

任何帮助将不胜感激!

提前致谢.

c# assembly codecave

6
推荐指数
1
解决办法
2760
查看次数

如何在Delphi 2009中声明静态变量?

我用谷歌搜索,我说,我已经看到了其他的"重复",但它们都没有在Delphi 2009中更新到更新4.

就像在C#中一样,我希望在线或尽可能短地创建一个静态变量.最后它就像一个全局变量,但它的排序.

在delphi 2009中最简单的方法是什么?

编辑

我按照你的一些答案,但它不起作用.

类型:

type
TmyClass = class(TObject)
  var staticVar:integer;
end;
Run Code Online (Sandbox Code Playgroud)

码:

procedure TForm1.Button1Click(Sender: TObject);
var a:integer;
begin
  TMyClass.staticVar := 5; // Line 31
  a := TMyClass.staticVar; // Line 32
  MessageBox(0,IntToStr(a),'',0);
end;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

[DCC Error] Unit1.pas(31): E2096 Method identifier expected 

[DCC Error] Unit1.pas(32): E2096 Method identifier expected
Run Code Online (Sandbox Code Playgroud)

delphi static class delphi-2009

6
推荐指数
1
解决办法
2万
查看次数

如何使用TDictionary?

通过使用谷歌,我发现了一些在Delphi中使用TDictionary的示例代码的一些不错的片段,但是无法编译它们中的任何一个.

我使用Delphi 2009 Update 1,2,3,4.

当我这样写:

var Dic: TDictionary<Integer,string>;
Run Code Online (Sandbox Code Playgroud)

我得到"Unknown idenitifier TDictionary <,>"

怎么用?

delphi generics delphi-2009

6
推荐指数
1
解决办法
5174
查看次数

如何将IntPtr/Int转换为Socket?

我想将message.WParam转换为Socket.

    protected override void WndProc(ref Message m)
    {
        if (m.Msg == Values.MESSAGE_ASYNC)
        {

            switch (m.LParam.ToInt32())
            {
                case Values.FD_READ:
                    WS2.Receive(m.WParam);
                case Values.FD_WRITE: break;
                default: break;
            }

        }
        else
        {
            base.WndProc(ref m);
        }
    }

public class WS2
{
    public static void Receive(IntPtr sock)
    {
        Socket socket = sock;
    }
}
Run Code Online (Sandbox Code Playgroud)

如何将IntrPtr(sock)转换为Socket,以便我可以调用Receive()?

c# sockets winsock intptr

5
推荐指数
1
解决办法
2751
查看次数

如何将byte []分配给记录

在C++中,它是这样完成的:

tPacket * packet = (tPacket *)data; //data is byte[] array; tPacket is a structure
Run Code Online (Sandbox Code Playgroud)

在C#中:

tPacket t = new tPacket();
GCHandle pin = GCHandle.Alloc(data, GCHandleType.Pinned);
t = (tPacket)Marshal.PtrToStructure(pin.AddrOfPinnedObject(), typeof(tPacket));
pin.free();
Run Code Online (Sandbox Code Playgroud)

数据是在通过TCP接收数据包后用作接收缓冲区的字节数组.该代码将数据放入tPacket(结构)的实例中,以便稍后可以访问该结构.

如何在Delphi中完成?

delphi

5
推荐指数
1
解决办法
2914
查看次数

为什么在面板上绘制的文字会消失?

我正在尝试在面板上绘制文本(面板有背景图片).

它工作得很好,但是当我最小化然后最大化应用程序时,文本就消失了.

我的代码:

using (Graphics gfx = Panel1.CreateGraphics())
{
    gfx.DrawString("a", new Font("Tahoma", 5), Brushes.White, new PointF(1, 1));
}
Run Code Online (Sandbox Code Playgroud)

如何保持静态,以免丢失?

c# winforms

5
推荐指数
2
解决办法
5447
查看次数

如何在没有可停靠窗体的缓慢冻结运动的情况下制作像IDE这样的可停靠窗体?

如何在没有可停靠窗体的缓慢冻结运动的情况下执行IDE方法或最终制作基本停靠方法?

当我在Delphi中搜索可停靠的表格并在程序员天堂上找到Zibadian的帖子时:

首先:Delphi IDE中的窗口不是MDI格式,而是SDI格式.

现在创建一个可停靠的窗口.

Form2将是可停靠的,Form1将是停靠它的地方.在Form1上放置一个控件(如TPanel)来为DockSite提供服务.确保为该控件将DockSite和UseDockManager属性设置为true.

对于Form2,将DragKind设置为dkDrop,将DragMode设置为dmAutomatic,将UseDockManager设置为true.

那是基本的码头功能.如果您运行程序,显示Form2并将该表单拖到停靠站点上,它应该停靠在该站点上.你甚至可以通过抓住你在IDE中看到的"标题"来取消它.

对我来说,该方法非常缓慢地移动可停靠的形式.然而,Zibadian的答案继续描述IDE如何做到:

IDE的dock方法稍微复杂一些,因为您没有看到docksite.我想,你需要编写一个Form1.OnDockOver或Form1.OnDockDrop来执行它.那些(那些)事件需要在适当的位置显示码头站点.

delphi drag-and-drop

5
推荐指数
1
解决办法
9944
查看次数

检查Mouse LButton是否已关闭?

如何检查我的鼠标左键当前是否按下/拖动某些东西(我预先设置了第一种可能性).

我试过Mouse.IsDraging,但没有结果.

注意:我在我的应用程序中处理鼠标消息,所以如果它是一个WM,它没有问题,只是分享一种方法来完成我的任务.

delphi mouse

5
推荐指数
1
解决办法
1万
查看次数