我对 C# 很陌生。我自己用 C++ 编写了 Dll,我将在 C# 应用程序中使用该 dll 中的函数。
因此,我在 C++ 项目中声明函数时执行以下操作:
public static __declspec(dllexport) int captureCamera(int& captureId);
Run Code Online (Sandbox Code Playgroud)
然后我试图在 C# 应用程序中导入这个方法:
[DllImport("MyLib.dll")]
public static extern int captureCamera(ref int captureId);
Run Code Online (Sandbox Code Playgroud)
但我有一个例外:
Unable to find an entry point named 'captureCamera' in DLL 'MyLib.dll'.
Run Code Online (Sandbox Code Playgroud)
任务是在不指定 EntryPoint 参数的情况下执行 dllimport。有人可以帮助我吗?
我在c ++中有一个简单的函数(不是类的方法)
__declspec(dllexport) extern "C" void __stdcall TestFunc();
Run Code Online (Sandbox Code Playgroud)
我试着从c#中调用它:
[DllImport("ImportTest.dll")]
public static extern void TestFunc();
...
TestFunc();
Run Code Online (Sandbox Code Playgroud)
它抛出了"无法找到入口点"的例外.
怎么了?
感谢你们对我的帮助 :)
我有这行 C++ 代码
WD_OpenDevice(PCSTR szDevPath, HANDLE *phDevice, HANDLE ahChannels[], int *pnChannelNum, int iVideoStandard = WD_VID_STD_PAL, PCSTR szUser = NULL, PCSTR szPswd = NULL);
Run Code Online (Sandbox Code Playgroud)
并称之为
WD_OpenDevice("xxxxxxxx", &m_hDev, m_ahChannels, &m_nChannelNum);
Run Code Online (Sandbox Code Playgroud)
C# 中 int * 和 HANDLE * 的等价物是什么?
我已使用 DllImport 将其转换为 C# 代码。但这是行不通的。
[DllImport("WD_SDK.dll", SetLastError = true)]
static extern int WD_OpenDevice(string szDevPath, IntPtr phDevice, IntPtr[] ahChannels, int pnChannelNum, int iVideoStandard = 1, string szUser = null, string szPswd = null);
Run Code Online (Sandbox Code Playgroud)
我称之为
IntPtr[] m_ahChannels = new IntPtr[4];
int m_nChannelNum = 0;
IntPtr m_hDev …Run Code Online (Sandbox Code Playgroud) A buffer overrun has occurred in MyApp.exe which has corrupted the program's internal state.
Run Code Online (Sandbox Code Playgroud)
我已经尝试了一些东西,但无法弄清楚是什么原因导致上述1/50的调用,可能是显而易见的事情,这是很多猜测.
[DllImport("user32.dll")]
public static extern IntPtr GetTopWindow(IntPtr hWnd);
[DllImport("user32.dll")]
public static extern uint GetWindowThreadProcessId(IntPtr hWnd, out UInt32 pid);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr GetWindow(IntPtr hWnd, uint uCmd);
public static IntPtr GetProcessWindow(int processId)
{
UInt32 pid = 0;
UInt32 dwThreadId = 0;
StringBuilder a = new StringBuilder(); …Run Code Online (Sandbox Code Playgroud) 使用SHGetFileInfo()函数,我可以获取的图标的最大大小是多少?就功能状态而言,我可以获得一个32x32像素图标(AKA SHGFI_LARGEICON).但是我试图弄清楚是否有办法获得更大的像48x48像素的图标.
我发现有常数像......
public const uint SHGFI_LARGEICON = 0x000000000; // get large icon
public const uint SHGFI_SMALLICON = 0x000000001; // get small icon
public const uint SHIL_JUMBO = 0x000000004; // get jumbo icon 256x256
public const uint SHIL_EXTRALARGE = 0x000000002; // get extra large icon 48x48
public const uint SHIL_LARGE = 0x000000000; // get large icon 32x32
public const uint SHIL_SMALL = 0x000000001; // get small icon 16x16
public const uint SHIL_SYSSMALL = 0x000000003; // get icon based off of …Run Code Online (Sandbox Code Playgroud) 我想从 C++ 获取双打数组。
我用整数数组进行了测试,它工作正常,但我不知道双精度数组不能工作。
双精度数组的第一个和第二个元素是错误的。
还有一个奇怪的事情,我把FreeCoTaskMem注释掉了,因为如果我不注释,应用程序就会崩溃,ints和doubles是一样的。
给我任何提示,谢谢。
C/C++ 代码
#define DllExport __declspec(dllexport)
extern "C"
{
DllExport void TestOutOfInts(int** ints);
DllExport void TestOutOfDoubles(double** doubles);
}
DllExport void TestOutOfInts(int** ints)
{
int xyzs[9] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
(*ints) = xyzs;
}
DllExport void TestOutOfDoubles(double** doubles)
{
double xyzs[9] = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9 };
(*doubles) = xyzs;
}
Run Code Online (Sandbox Code Playgroud)
C# 代码
[DllImport("MeshToolsWrapper.dll")]
static extern void TestOutOfInts(out IntPtr ints);
[DllImport("MeshToolsWrapper.dll")] …Run Code Online (Sandbox Code Playgroud) 我必须从我的Windows窗体应用程序导入kernel32.dll才能使用Sleep功能.在VB.net中,我使用下面的代码.
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Run Code Online (Sandbox Code Playgroud)
如何在c#中转换相同的内容?