小编San*_*099的帖子

对PInvoke函数'[...]'的调用使堆栈失衡

对于我已经使用了很长一段时间的一些东西,我得到了这个奇怪的错误.它可能是Visual Studio 2010中的新东西,但我不确定.
我试图用C#调用用C++编写的无人函数.
从我在互联网上阅读的内容和错误信息本身来看,这与我的C#文件中的签名与C++中的签名不同但我真的看不到它这一事实有关.
首先,这是我在下面的无人函数:

TEngine GCreateEngine(int width,int height,int depth,int deviceType);
Run Code Online (Sandbox Code Playgroud)

这是我在C#中的功能:

[DllImport("Engine.dll", EntryPoint = "GCreateEngine", CallingConvention = CallingConvention.StdCall)]  
        public static extern IntPtr CreateEngine(int width,int height,int depth,int device);
Run Code Online (Sandbox Code Playgroud)

当我调试到C++时,我看到所有的参数都很好,因此我只能认为它与从TEngine(这是一个名为CEngine的类的指针)转换为IntPtr有关.我之前在VS2008中使用过这个没问题.

c# c++ pinvoke unmanaged managed

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

构造函数可以返回NULL值吗?

我知道构造函数不会"返回"任何东西,但是例如,如果我调用CMyClass *object = new CMyClass()是否有任何方法使对象为NULL如果构造函数失败?在我的情况下,我有一些必须加载的图像,如果文件读取失败,我希望它返回null.有没有办法做到这一点?
提前致谢.

c++ null constructor return

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

Opengl Vertex属性步幅

嘿.我是OpenGL ES的新手,但我已经拥有了普通OpenGL的经验.我被告知,由于优化避免缓存未命中,使用隔行扫描数组作为顶点缓冲区要快得多.
我开发了一个顶点格式,我将使用它看起来像这样

struct SVertex
{
    float x,y,z;
    float nx,ny,nz;
    float tx,ty,tz;
    float bx,by,bz;
    float tu1,tv1;
    float tu2,tv2;
};

然后我使用了"glVertexAttribPointer(index,3,GL_FLOAT,GL_FALSE,stride,v);" 指向顶点数组.索引是我想要使用的属性之一,除了步幅之外,其他一切都没问题.在我决定将其添加到等式之前,它起作用了.我通过了尺寸(SVertex)和13*4这样的步幅,但它们似乎都没有效果.
如果它有任何重要性,我会画这样的原语

glDrawElements(GL_TRIANGLES,surface->GetIndexCount()/3,GL_UNSIGNED_INT,surface->IndPtr());
在OpenGL规范中写道,步幅应该是从属性末尾(在本例中为z)到同一类型的下一个属性(在本例中为x)的字节大小.所以通过我的计算,这应该是13(nx,ny,nz,tx,ty ...... tuv2,tv2)乘以4(浮点数的大小).
哦,还有一件事是显示器只是空的.
有人可以帮我这个吗?
非常感谢.

c++ rendering pointers opengl-es

7
推荐指数
1
解决办法
6904
查看次数

C#作为脚本语言

可能重复:
从非托管代码调用托管.NET代码的最佳方法

我很想知道我是否可以使用C#作为c ++本机应用程序中托管的脚本语言.我已经在自己的游戏引擎上工作了5年,但我从来没有触及它的脚本方面.我喜欢在Unity中如何为游戏中的不同对象编写C#脚本.

我做了一些搜索,但我找不到任何实际用途.

请注意,我的问题与.Net无关,而与C#作为通用语言有关.

为了确保,我将说明:我不想从C#调用本机c ++.我反过来想要它.

如果有人能指出我的一些资源,我会很感激.

c# c++ native unity-game-engine

7
推荐指数
1
解决办法
5192
查看次数

自定义字符串类(C++)

我正在尝试编写自己的C++ String类,用于教育和需求目的.
首先,我对操作员知之甚少,这就是我想学习它们的原因.我开始编写我的课程但是当我运行它时会阻止程序,但不会发生任何崩溃.
在进一步阅读之前,请先查看以下代码:

class CString
{
private:
  char* cstr;
public:
  CString();
  CString(char* str);
  CString(CString& str);
  ~CString();

  operator char*();
  operator const char*();
  CString operator+(const CString& q)const;
     CString operator=(const CString& q);
};
Run Code Online (Sandbox Code Playgroud)

首先,我不太确定我宣布一切正确.我尝试谷歌搜索它,但所有关于重载的教程解释了基本的ideea,这很简单,但缺乏解释如何以及何时调用每个东西.例如,在my =运算符中,程序调用CString(CString&str); 但我不知道为什么.
我还附上了下面的cpp文件:

CString::CString()
{
 cstr=0;
}
CString::CString(char *str)
{
 cstr=new char[strlen(str)];
 strcpy(cstr,str);
}
CString::CString(CString& q)
{
 if(this==&q)
  return;
 cstr = new char[strlen(q.cstr)+1];
 strcpy(cstr,q.cstr);
}
CString::~CString()
{
 if(cstr)
  delete[] cstr;
}
CString::operator char*()
{
 return cstr;
}
CString::operator const char* ()
{
 return cstr;
}
CString CString::operator +(const …
Run Code Online (Sandbox Code Playgroud)

c++ string overloading reference operator-keyword

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

如何使用ASP.NET重定向到另一个页面?

我知道这是一个简单的问题,但我真的在Google上找不到任何东西.对不起,如果我没有正确搜索.我创建了2页,在第一页中我有一个按钮.
我应该在C#代码中写什么来改变以在第二页上重定向我?
我通常知道我在C#的方式,但我是ASP的新手.

.net c# asp.net button

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

CString a ="Hello"+"World!"; 可能吗?

我正在制作自己的字符串class,我想确保CString a = "Hello " + "World!";工作(即不会给编译器错误,如:)cannot add 2 pointers.

我的字符串classchar*在需要时自动转换,因此写入printf(a)不会破坏代码.

有没有办法替换字符周围的编译器行为?(即在引号之间"abc").或者,或者,更改+操作符的行为以处理字符串

c++ string pointers operator-overloading

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

从 C++ 编写 C# 脚本?

是否有任何 C# 解释器可以在 C++ 中使用但仍然允许 .Net 访问?
我想在游戏中使用 C# 脚本,但我不确定如何继续。

c# c++ scripting

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

如何向未绑定的DataGridView添加行?

我有一个DataGridViewC#,我想以编程方式添加行.没有绑定到网格的数据但是当我调用dataGrid.Rows.Add();它时会抛出一个数据System.InvalidOperationException.

我浏览了整个互联网,我发现这个问题对于有数据绑定的人来说.我希望从代码中完全控制网格.

有人可以帮我这个吗?

不确定它是否有所作为,但我使用.Net framework 3.5.

c# datagridview

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

关于c ++命名约定的问题

我正在尝试为诸如win32,mac os,linux,iOs等平台创建一个抽象层.我希望这是动态链接的.在不支持这一点的平台上,它应该不是问题,因为从我所看到的,可以编译为动态库的所有内容都可以编译为静态库,并且对代码的影响最小.

现在,为了达到这个目的:

我创建了一个名为IThread的接口和一个名为CThread的类.我使用一个名为CreateThread的函数,它使用extern"C"定义,以便能够导出它并在库外调用它.这里的问题是在win32中,例如已经有一个名为CreateThread的函数,因此我得到一个链接器错误.我理解错误以及它出现的原因,但我不确定避免这种情况的好方法.我真的不喜欢使用奇怪的命名,因为qt使用像CreateQtThread.
我的另一个想法是创建一个创建CThread实例的线程管理器/工厂,但我不确定这是个好主意.

你们怎么看待这件事?我问,因为我不想急于处理像这样的重要组织问题.

非常感谢你

c++ dll winapi naming extern

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

内联模板化函数

我正在尝试为项目编写一些数学代码,我偶然发现了一个有趣的问题:

template<class T> class Radian;
template<class T> class Degree;

template <class T>
class Radian
{
public:
    T mRad;
public:
    Radian(const Degree& d);
};

template <class T>
class Degree
{
public:
    T mDeg;
public:
    Degree(const Radian& d);
};

inline Radian::Radian ( const Degree& d ) 
{

}

inline Degree::Radian ( const Radian& d )
{

}
Run Code Online (Sandbox Code Playgroud)

请注意,代码更大,但我删除了不必要的功能,以便您更好地理解它.

我理解模板是如何工作的,我知道它们是在编译时生成的,但对于这个特定的例子,我并不真正理解我应该使用什么语法.我知道在构造函数中,Degree应该有一个模板参数,但我不确定如何编写它.从我看到我可能不得不使用另一个模板,但两者使用相同的T会很好,因为我不会从Degree_float转换为Radian_double.

谁能对此有所了解?

谢谢.

c++ templates inline

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