2010-02-09 8 views
24

मुझे VB.NET में चीजों को DLLImport कैसे करना चाहिए? एक उदाहरण होगा:वीबीएनईटी में <DllImport> का उपयोग कैसे करें?

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _ 
Private Shared Function GetWindowText(ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer 

End Function 

अगर मैं इसे एक वर्ग या कहीं और के अंदर डाल दिया, मैं हो "DllImport परिभाषित नहीं है" मैं Visual Studio 2008 व्यावसायिक

उत्तर

33

उपयोग कर रहा हूँ आप के शीर्ष करने के Imports System.Runtime.InteropServices जोड़ने के लिए अपने मूल फाइल।

<System.Runtime.InteropService.DllImport("user32.dll", _ 
    SetLastError:=True, CharSet:=CharSet.Auto)> _ 
+0

आप क्या विजुअल बेसिक 2015 के लिए कोई पुस्तक है जो केवल इस बारे में बात करती है कि किसी भी प्रकार के 'System.Runtime.InteropService.DllImport' का उपयोग कैसे करें? – YumYumYum

4

मैं pinvoke.net है कि आप एक MarshalAs स्टेटमेंट राज्य के लिए कि StringBuffer LPSTR के बराबर है सकते हैं पर getwindowtext (user32) में देखा था:

वैकल्पिक रूप से, आप पूरी तरह से विशेषता नाम अर्हता प्राप्त कर सकते हैं।

<DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Ansi)> _ 
Public Function GetWindowText(hwnd As IntPtr, <MarshalAs(UnManagedType.LPStr)>lpString As System.Text.StringBuilder, cch As Integer) As Integer 
End Function 
3

इस

Private Declare Function GetWindowText Lib "user32.dll" (ByVal hwnd As IntPtr, ByVal lpString As StringBuilder, ByVal cch As Integer) As Integer 

कोशिश कर सकते हैं मैं हमेशा के बजाय प्रचार समारोह का उपयोग DllImport ... इसकी अधिक बस, अपने छोटे और करता ही

+6

ऐसी कई चीजें हैं जिन्हें आप घोषित कथन के साथ नहीं कर सकते हैं। इंटरऑप विशेषताओं में से कोई भी आपके लिए उपलब्ध नहीं है। ईमानदारी से, यह विरासत वीबी 6 वाक्यविन्यास है, और मुझे लगता है कि सभी नए वीबीएनईटी कोड मानक .NET वाक्यविन्यास का उपयोग करके लिखा जाना चाहिए। –

+0

ठीक है, आप सही हैं लेकिन मैं आलसी प्रोग्रामर हूं, इसलिए मैं हमेशा सबसे छोटा पाने की कोशिश करता हूं :) मेरी परियोजनाओं के लिए यह हमेशा मेरी मदद करता है –