सी सी # से स्ट्रिंग पासिंग ++ सीधे आगे होना चाहिए। PInvoke आपके लिए रूपांतरण का प्रबंधन करेगा।
सी ++ से सी # तक स्ट्रिंग प्राप्त करना स्ट्रिंगबिल्डर का उपयोग करके किया जा सकता है। सही आकार के बफर को बनाने के लिए आपको स्ट्रिंग की लंबाई प्राप्त करने की आवश्यकता है।
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
public static string GetText(IntPtr hWnd)
{
// Allocate correct string length first
int length = GetWindowTextLength(hWnd);
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(hWnd, sb, sb.Capacity);
return sb.ToString();
}
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool SetWindowText(IntPtr hwnd, String lpString);
SetWindowText(Process.GetCurrentProcess().MainWindowHandle, "Amazing!");
स्रोत
2012-05-29 13:06:42
आपका 'const' उपयोग पीछे की ओर है:
यहाँ एक अच्छी तरह से ज्ञात Win32 एपीआई के दो उदाहरण हैं। –
@ बेन वोगेट: धन्यवाद, इसे ठीक किया गया। – sithereal
इन उदाहरणों में VisStudio 2012 में स्टैक अपवादों के साथ विस्फोट हुआ जब तक कि मैंने सी # और सी दोनों को सीडीसीएल जोड़ा। बाहरी "सी" __declspec (dllexport) int __cdecl SetString (... और फिर ... [DllImport (" YourLib.dlll ", कॉलिंग कन्वेंशन = कॉलिंग कन्वेंशन.सीडीसीएल)] ... – user922020