小编Mah*_*nGM的帖子

用Win32程序中的main()函数替换WinMain()

我在StackOverflow和Google上搜索了一下但是无法理解.我想用这种类型的用户编程启动我的应用程序:

int main()
{
  Window App("Test", 640, 480);

  while(App.IsOpen())
  {
    // Do the stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,这是不可能的,因为,我应该通过hInstancehPrevInstance和其他参数的WinMain功能.实际上有一个Window类,我设计用于使窗口创建更容易一些.我在SFML上看到了这个实现,但我不知道它是如何实现的.

现在我正在使用通常的方式:

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR, int)
{
  Window App(hInst, hPrevInst, "Test", 640, 480);

  while(App.IsOpen())
  {
    // Do the stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

c++ winapi

26
推荐指数
4
解决办法
3万
查看次数

用C#创建编程语言

首先,我想要一种编程语言来实现该语言与我的应用程序环境之间的交互.我写了一些只知道的东西if,void以及function带有范围的变量,当然还要调用内置函数,它们都能完美地工作.但现在,我坚持使用一些部分,并意识到我不能继续只是简单的文本解析,并且有许多我不能做的事情.

为此,我搜索了这个主题,并使用C#创建了编程语言.这很好,但我有两个问题.

  1. 我无法理解.
  2. 它生成控制台代码,但我想在Windows窗体应用程序中使用它们.

简而言之,有没有人知道如何在不了解Lexers的情况下制作语言,思考......

谢谢.

c# programming-languages

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

读/写字符串二进制数据 - BinaryReader

我编写了以下方法来使用二进制模式将文件归档到一个文件中:

        // Compile archive
        public void CompileArchive(string FilePath, ListView FilesList, Label Status, ProgressBar Progress)
        {
            FileTemplate TempFile = new FileTemplate();
            if (FilesList.Items.Count > 0)
            {
                BinaryWriter Writer = new BinaryWriter(File.Open(FilePath, FileMode.Create), System.Text.Encoding.ASCII);
                Progress.Maximum = FilesList.Items.Count - 1;
                Writer.Write((long)FilesList.Items.Count);
                for (int i = 0; i <= FilesList.Items.Count - 1; i++)
                {
                    TempFile.Name = FilesList.Items[i].SubItems[1].Text;
                    TempFile.Path = "%ARCHIVE%";
                    TempFile.Data = this.ReadFileData(FilesList.Items[i].SubItems[2].Text + "\\" + TempFile.Name);
                    Writer.Write(TempFile.Name);
                    Writer.Write(TempFile.Path);
                    Writer.Write(TempFile.Data);
                    Status.Text = "Status: Writing '" + TempFile.Name + "'";
                    Progress.Value = i;
                }
                Writer.Close(); …
Run Code Online (Sandbox Code Playgroud)

.net c# binary

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

如何禁用 TreeView 自动第一个节点选择

我在谷歌上搜索了一点,但找不到有用的东西。TreeView 的行为就像当你向它的树添加一个节点时,默认情况下它会被选中,这意味着你应该总是有一个被选中的节点,除非树是空的。

有没有办法覆盖或禁用它?

.net c# treeview

4
推荐指数
1
解决办法
9153
查看次数

在VB.NET中向集合添加结构

最近我发现我无法实例化数组的结构:

Dim mObjectLists() As New objectLayout
Run Code Online (Sandbox Code Playgroud)

好吧,公平,但这是一种在数组中存储大量数据而不是定义类的简单方法.之后,我试图定义这个:

Dim mObjectLists() As Collection
Run Code Online (Sandbox Code Playgroud)

并将结构添加到集合中.但它说你应该首先实例化参考对象.我搜索了基于基本集合类创建自己的Collection,但我认为浪费时间编写带有类继承而不是第一个示例的代码.

我应该怎么做才能解决我的问题,如第一个样本:).

vb.net

3
推荐指数
1
解决办法
6724
查看次数

将URL编码的字符串转换为UTF-8

昨天我遇到了从URL获取一些Unicode字符串的问题.实际上我使用CodeIgniter,URL段将被传递到控制器/函数(参数).我不知道CI是否改变了编码,或者它是其他的东西.我在我的HTML页面中的内容和地址栏中都有正确的编码,直到我得到那些Unicode段.

例如:

localhost/df-gamez/news/??????-????-????-???-????-??????
Run Code Online (Sandbox Code Playgroud)

最后一段是perisan字符,符合UTF-8.它在任何地方都能正确呈现,但是当我在我的代码中得到它时它会变成这样的东西:

%d8%a7%d9%81%d8%aa%d8%aa%d8%a7%d8%ad-%d8%b3%d8%a7%db%8c%d8%aa-%d8%ac%d8%af%db%8c%d8%af-
%d8%aa%db%8c%d9%85-%d8%af%d8%b1%db%8c%d9%85-%d9%81%da%a9%d8%aa%d9%88%d8%b1%db%8c
Run Code Online (Sandbox Code Playgroud)

我尝试将其更改为UTF-8,mb_encode但事实并非如此.我的HTML页面和Controller文件都被格式化为UTF-8而没有BOM.

和平了!

php url codeigniter character-encoding

3
推荐指数
1
解决办法
3824
查看次数

如何使用 LuaBind 将 std::map 绑定到 Lua

我试图将我的std::map<std::string, std::string>作为类属性公开给 Lua。我已经为我的 getter 和 setter 设置了这个方法:

luabind::object FakeScript::GetSetProperties()
{
    luabind::object table = luabind::newtable(L);
    luabind::object metatable = luabind::newtable(L);

    metatable["__index"] = &this->GetMeta;
    metatable["__newindex"] = &this->SetMeta;

    luabind::setmetatable<luabind::object, luabind::object>(table, metatable);

    return table;
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以在 Lua 中做这样的事情:

player.scripts["movement"].properties["stat"] = "idle"
print(player.scripts["movement"].properties["stat"])
Run Code Online (Sandbox Code Playgroud)

但是,我在 C++ 中提供的代码没有被编译。它告诉我在这一行metatable["__index"] = &this->GetMeta;和它之后的行有一个对重载函数的模棱两可的调用。我不确定我这样做是否正确。

错误信息:

error C2668: 'luabind::detail::check_const_pointer' : 
ambiguous call to overloaded function
c:\libraries\luabind-0.9.1\references\luabind\include\luabind\detail\instance_holder.hpp    75
Run Code Online (Sandbox Code Playgroud)

这些是SetMetaGetMetaFakeScript

static void GetMeta();
static void SetMeta();
Run Code Online (Sandbox Code Playgroud)

以前我是为 getter 方法这样做的:

luabind::object FakeScript::getProp()
{
    luabind::object obj = …
Run Code Online (Sandbox Code Playgroud)

c++ lua stl luabind

3
推荐指数
1
解决办法
1291
查看次数

vector.push_back(B)和vector.push_back(new A((*B))),为什么不一样呢?

我有这两个类:

class A
{
public:
    A();
    virtual ~A();

    virtual void TellMyName();
};

class B : public A
{
private:
    std::string szName;
public:
    B();
    ~B();

    void TellMyName();

    void SetName(std::string val){ szName = val; }
};
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

void main()
{
    std::vector<A*> List_A;

    B* B_Instance = new B();
    B_Instance->SetName("B");

    List_A.push_back(B_Instance); // Way 1
    List_A.push_back(new A((*B_Instance))); // Way 2

    List_A[0]->TellMyName();
    List_A[1]->TellMyName();
}
Run Code Online (Sandbox Code Playgroud)

TellMyName()就是要提示一个消息框.如果我使用"方式1"它没有问题,但如果我使用"方式2"它将提示没有文本的消息,这意味着B类的所有成员都是空的,就像他们从来没有被任何东西填满.我通过使用解决了这个问题std::shared_ptr,但是有没有其他方法可以不使用智能指针,因为我必须在一个大项目中实现这种方法,并且会有很多变化和失败.顺便说一下,"Way 2"的原因是什么?

c++ oop inheritance

0
推荐指数
1
解决办法
204
查看次数