实现以下功能:C++读写剪切板,封装为dll,并用C#调用,实现读写剪切板。
第一部分,C++代码:
#include<stdio.h>
#include<windows.h>
#include<string.h>
extern "C" __declspec(dllexport) void SetString(char * text, int size)
{
OpenClipboard(NULL);//打开剪切板
EmptyClipboard();//清空剪切板
HANDLE handle = GlobalAlloc(GMEM_FIXED, size);//分配内存
char* clip = (char*)GlobalLock(handle);//锁定内存,返回申请内存的首地址
strcpy_s(clip, size, text);//复制文本到内存地址
SetClipboardData(CF_TEXT, handle);//设置剪切板数据
GlobalUnlock(handle);//解除锁定
CloseClipboard();//关闭剪切板
}
extern "C" __declspec(dllexport) char* GetString()
{
char * text = NULL;
OpenClipboard(NULL);//打开剪切板
if (IsClipboardFormatAvailable(CF_TEXT))
{
HANDLE handle = GetClipboardData(CF_TEXT);//获取剪切板数据
text = (char*)GlobalLock(handle);//锁定内存,返回申请内存的首地址
GlobalUnlock(handle);//解除锁定
}
CloseClipboard();//关闭剪切板
return text;
}
void main(){
char * text = "中国制造,惠及全球";
SetString(text, 100);
printf(GetString());
getchar();
}
第二部分,C++编译为dll:
第三部分,C#调用:
[DllImport("Clipboard.dll")]
public static extern void SetString(string text, int size);
[DllImport("Clipboard.dll")]
public static extern string GetString();