小编Sup*_*ard的帖子

为什么C#和VB.NET以不同的方式隐式编组char*?

所以我有一个用C++编写的函数,看起来像这样......

extern "C" __declspec(dllexport) int __stdcall SomeFunction(char *theData)
{
    // stuff
}
Run Code Online (Sandbox Code Playgroud)

...我在我当前的项目中使用它(用C#编写).还有其他项目使用VB编写的这个函数,如下所示:

Public Declare Function SomeFunction Lib "MyDLL.dll" _
    Alias "_SomeFunction@4" (ByVal theData As String) As Integer
Run Code Online (Sandbox Code Playgroud)

所以我尝试在C#中编写一个等价物,但发现使用字符串类型对我来说实际上并不起作用 - 字符串会返回我传递给它的相同数据.我尝试使用"ref string"而不是通过引用传递字符串,我得到了内存访问冲突.

在做了一些挖掘之后,我发现这是C#中正确的实现:

[DllImport("MyDLL.dll", EntryPoint = "_SomeFunction@4")]
public static extern int SomeFunction(StringBuilder theData);
Run Code Online (Sandbox Code Playgroud)

现在我知道VB.NET和C#是完全不同的,但我想我总是认为字符串是字符串.如果一种语言能够元帅char*String隐,为什么不能等,需要一个不同的类共?

(为清晰起见编辑了标题)

c# c++ vb.net string marshalling

10
推荐指数
1
解决办法
1304
查看次数

.NET随机RGB颜色

我在这里写了这个C#代码片段.我的想法是生成RGB中的随机.NET颜色,同时将alpha保持在255(即完整)

我的问题是这个功能是否有可能击中RGB空间中的每种颜色?我以为我是,但现在我第二次猜测自己.或者有更好的方法来做到这一点?

谢谢.

const int COLORSPACE = 0xFF * 0xFF * 0xFF;
const int ALPHA = 0xFF << 24;    

Random _rand = new Random();

Color RandomColor
{
    get
    {
        return Color.FromArgb(_rand.Next(COLORSPACE) + ALPHA);
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# random math colors

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

标签 统计

c# ×2

.net ×1

c++ ×1

colors ×1

marshalling ×1

math ×1

random ×1

string ×1

vb.net ×1