none
Функции c# и C++ обертки?

    Вопрос

  • Извините за тупой, теоретический вопрос

    В C# функции это обертки над низкоуровневыми Win 32 API(API)?
    Например: MessageBox.Show над int MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType); и Registry.SetValue(keyName, "TestLong", 12345678901234, RegistryValueKind.QWord); над LSTATUS RegSetValueExA(HKEY hKey,LPCSTR lpValueName,DWORD Reserved,DWORD dwType,const BYTE *lpData,DWORD cbData);?

    А C++ функции обернутые, напишите пример, а в заголовке Winreg.h функции это обертки над Win 32 API(API) или нет?

    В c# все функции обертки? или какие то нет?напишите пример
    В c++ напишите пример обернутых функций и своих

    Не оскорбляйте пожалуйста и не флудите. Заранее спасибо
    7 февраля 2019 г. 15:46

Ответы

  • Начать с того, что MessageBox.Show в  терминах C# - это не "функция". Функциями в C# обычно называют определенные типы делегатов (например Func<T,TResult>). Скорее всего, вы имели в виду "методы".

    В C# функции это обертки над низкоуровневыми Win 32 API(API)?

    Метод MessageBox.Show действительно является оберткой над функцией WinAPI, как и многие другие методы .NET. Но, разумеется, не все, например Path.GetFileNameWithoutExtension реализован полностью в управляемом коде. 

    А C++ функции обернутые, напишите пример, а в заголовке Winreg.h функции это обертки над Win 32 API(API) или нет?

    В файле winreg.h не "обертки", а объявления функций из WinAPI, которые позволяют использовать их в приложениях на С++. Конечно, функции С++ также могут быть обертками над чем-то. 

    7 февраля 2019 г. 17:43

Все ответы

  • Начать с того, что MessageBox.Show в  терминах C# - это не "функция". Функциями в C# обычно называют определенные типы делегатов (например Func<T,TResult>). Скорее всего, вы имели в виду "методы".

    В C# функции это обертки над низкоуровневыми Win 32 API(API)?

    Метод MessageBox.Show действительно является оберткой над функцией WinAPI, как и многие другие методы .NET. Но, разумеется, не все, например Path.GetFileNameWithoutExtension реализован полностью в управляемом коде. 

    А C++ функции обернутые, напишите пример, а в заголовке Winreg.h функции это обертки над Win 32 API(API) или нет?

    В файле winreg.h не "обертки", а объявления функций из WinAPI, которые позволяют использовать их в приложениях на С++. Конечно, функции С++ также могут быть обертками над чем-то. 

    7 февраля 2019 г. 17:43
  • Метод MessageBox.Show действительно является оберткой над функцией WinAPI, как и многие другие методы .NET. Но, разумеется, не все, например Path.GetFileNameWithoutExtension реализован полностью в управляемом коде. 

     

    Path.GetFileNameWithoutExtension написана типа с нуля?

    Я правильно понял?




    В файле winreg.h не "обертки", а объявления функций из WinAPI, которые позволяют использовать их в приложениях на С++. Конечно, функции С++ также могут быть обертками над чем-то. 

    В winreg.h типа объявления функций WinAPI в не обернутом виде, а как чисто WinAPI, например MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType); и ссылается на динамическую библиотеку в системе(вроде user32.dll)?

    Я правильно понял?

    и p/invoke это типа использования api?
    7 февраля 2019 г. 21:33
  • В файле winreg.h не "обертки", а объявления функций из WinAPI, которые позволяют использовать их в приложениях на С++. Конечно, функции С++ также могут быть обертками над чем-то. 

    В winreg.h типа объявления функций WinAPI в не обернутом виде, а как чисто WinAPI, например MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType); и ссылается на динамическую библиотеку в системе(вроде user32.dll)?

    Я правильно понял?

    <blockquote><p><span style="font-size:0.75em;">Метод MessageBox.Show действительно является оберткой над функцией WinAPI, как и многие другие методы .NET. Но, разумеется, не все, например Path.GetFileNameWithoutExtension реализован полностью в управляемом коде. </span><br /></p><p></p></blockquote>

    Path.GetFileNameWithoutExtension написана типа с нуля?

    Я правильно понял?


    Значительная часть функционала .Net реализована в управляемом коде, например весь ADO.Net. Часть использует вызовы в родной код который является частью самого .Net Framework который по мере надобности вызывает API Win32. В других случаях может вызываться непосредственно код Win32, через P/Invoke или COM Interop.

    Вы можете самостоятельно посмотреть что и как просто отлаживая код который вызывает нужные метод. Символы и исходники загрузятся если настроить как описано тут:

    https://docs.microsoft.com/en-us/visualstudio/debugger/how-to-debug-dotnet-framework-source?view=vs-2017


    This posting is provided "AS IS" with no warranties, and confers no rights.

    7 февраля 2019 г. 21:53
    Модератор
  • "Я правильно понял?"

    В целом правильно. Только объявления в заголовочных файлах С++ не ссылаются на конкретную DLL, а лишь описывают параметры функции и ее возвращаемое значение, а также указывают, что функция является внешней (т.е. что ее реализация находится в другом модуле). Ссылка на конкретную DLL задается уже путем передачи компоновщику библиотеки импорта для этой DLL (специального файла с расширением lib) через параметры командной строки или директивы #pragma, в случае Visual C++.

    8 февраля 2019 г. 3:09
  • "Я правильно понял?"

    В целом правильно. Только объявления в заголовочных файлах С++ не ссылаются на конкретную DLL, а лишь описывают параметры функции и ее возвращаемое значение, а также указывают, что функция является внешней (т.е. что ее реализация находится в другом модуле). Ссылка на конкретную DLL задается уже путем передачи компоновщику библиотеки импорта для этой DLL (специального файла с расширением lib) через параметры командной строки или директивы #pragma, в случае Visual C++.

    В случае с DirectX например lib? вроде статическая линковка(или связывания), правильно? 

    А в случае MessageBox и на остальные динамические dll типа user32.dll, gdi.dll тоже статическая линковка(или связывания) и тоже есть lib или нет, если да то где lib в компиляторе?

    Или там динамическое связывание(по dll)?

    Ответе на все вопросы пожалуйста

    8 февраля 2019 г. 10:08
  • Lib-файл может быть как статической библиотекой, так и библиотекой импорта для DLL. На практике, конечно, чаще всего используется динамическое связывание. Библиотеки импорта для библиотек Windows, вроде user32.dll, поставляются с Windows SDK, для DirectX - с DirectX SDK. 


    8 февраля 2019 г. 10:50
  • Lib-файл может быть как статической библиотекой, так и библиотекой импорта для DLL. На практике, конечно, чаще всего используется динамическое связывание. Библиотеки импорта для библиотек Windows, вроде user32.dll, поставляются с Windows SDK, для DirectX - с DirectX SDK. 


    Типа в Visual Studio, а так(если не Visual Studio)?  в любой среде разработки или компиляторе c++?
    8 февраля 2019 г. 10:55
  • С Visual Studio в комплекте идет урезанная версия Windows SDK, которая содержит lib-файлы. С другими IDE ситуация может быть разной, например, CodeBlocks содержит часть lib-файлов Windows SDK (которые, правда, переименованы в расширение .a, но суть от этого не меняется, это абсолютно те же файлы). 
    8 февраля 2019 г. 14:19
  • Спасибо за ответы
    8 февраля 2019 г. 15:34