C# 如何将COLORREF中的所有数据返回给C中的调用者#
我正在尝试编写一个C# 如何将COLORREF中的所有数据返回给C中的调用者#,c#,c++,.net,C#,C++,.net,我正在尝试编写一个.dll,然后用C#调用这个.dll。我跟随这篇文章: 现在,我的问题是如何将COLORREF中的所有数据返回给C#中的调用者,然后能够区分这些值 这是.dll中的源代码: #pragma一次 #包括 外部“C” { __declspec(dllexport)COLORREF\uU stdcall getColor(int X,int Y){ HDC _HDC=GetDC(NULL); COLORREF_结果=0; 如果(_hdc) { _结果=GetPixel(_hdc,X
.dll
,然后用C#调用这个.dll
。我跟随这篇文章:
现在,我的问题是如何将COLORREF
中的所有数据返回给C#中的调用者,然后能够区分这些值
这是.dll
中的源代码:
#pragma一次
#包括
外部“C”
{
__declspec(dllexport)COLORREF\uU stdcall getColor(int X,int Y){
HDC _HDC=GetDC(NULL);
COLORREF_结果=0;
如果(_hdc)
{
_结果=GetPixel(_hdc,X,Y);
/*int _red=GetRValue(_result);
int _green=GetGValue(_result);
int_blue=GetBValue(_结果)*/
ReleaseDC(空,_hdc);
返回结果;
}
返回结果;
}
}
以下是C#来源的一些部分:
public分部类主窗口:表单
{
[DllImport(@“test.dll”,EntryPoint=“getColor”,CallingConvention=CallingConvention.StdCall)]
私有静态外部UInt32 getColor(int X,int Y);
私有void ColB_单击(对象发送方,事件参数e)
{
UInt32结果=getColor(500500);
MessageBox.Show(Convert.ToString(result));/COLORREF
只是DWORD
的别名,它在C#中确实是UInt32
。因此,只要在C#中调用getColor()
函数,您的代码看起来就不错了。不过,我建议让函数返回CLR\u无效(0xFFFFFFFF
)失败时,而不是返回0(黑色),特别是因为GetPixel()
在失败时返回CLR\u INVALID
,例如:
COLORREF\uu stdcall getColor(int X,int Y){
COLORREF\u结果=CLR\u无效;
HDC _HDC=GetDC(NULL);
如果(_hdc)
{
_结果=GetPixel(_hdc,X,Y);
ReleaseDC(空,_hdc);
}
返回结果;
}
也就是说,控件的属性需要a,而不是UInt32
。可以使用以下方法之一从COLORREF
获取Color
,例如:
UInt32结果=getColor(500500);
如果(结果!=0xFFFFFFFF){
int红色=(int)(字节)(结果&0xFF);
绿色整数=(整数)(字节)((结果>>8)和0xFF);
蓝色整数=(整数)(字节)((结果>>16)和0xFF);
ColB.BackColor=Color.FromArgb(红色、绿色、蓝色);
}
或者,方法:
UInt32结果=getColor(500500);
如果(结果!=0xFFFFFFFF){
ColB.BackColor=ColorTranslator.FromWin32((int)结果);
}