所以我有一个用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#代码片段.我的想法是生成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)