我在StackOverflow和Google上搜索了一下但是无法理解.我想用这种类型的用户编程启动我的应用程序:
int main()
{
Window App("Test", 640, 480);
while(App.IsOpen())
{
// Do the stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这是不可能的,因为,我应该通过hInstance
和hPrevInstance
和其他参数的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)
谢谢.
首先,我想要一种编程语言来实现该语言与我的应用程序环境之间的交互.我写了一些只知道的东西if
,void
以及function
带有范围的变量,当然还要调用内置函数,它们都能完美地工作.但现在,我坚持使用一些部分,并意识到我不能继续只是简单的文本解析,并且有许多我不能做的事情.
为此,我搜索了这个主题,并使用C#创建了编程语言.这很好,但我有两个问题.
简而言之,有没有人知道如何在不了解Lexers的情况下制作语言,思考......
谢谢.
我编写了以下方法来使用二进制模式将文件归档到一个文件中:
// 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) 我在谷歌上搜索了一点,但找不到有用的东西。TreeView 的行为就像当你向它的树添加一个节点时,默认情况下它会被选中,这意味着你应该总是有一个被选中的节点,除非树是空的。
有没有办法覆盖或禁用它?
最近我发现我无法实例化数组的结构:
Dim mObjectLists() As New objectLayout
Run Code Online (Sandbox Code Playgroud)
好吧,公平,但这是一种在数组中存储大量数据而不是定义类的简单方法.之后,我试图定义这个:
Dim mObjectLists() As Collection
Run Code Online (Sandbox Code Playgroud)
并将结构添加到集合中.但它说你应该首先实例化参考对象.我搜索了基于基本集合类创建自己的Collection,但我认为浪费时间编写带有类继承而不是第一个示例的代码.
我应该怎么做才能解决我的问题,如第一个样本:).
昨天我遇到了从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.
和平了!
我试图将我的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)
这些是SetMeta
和GetMeta
在FakeScript
:
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) 我有这两个类:
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"的原因是什么?