Can’t find P/Invoke DLL sqlcemeNN.dll
I know this is very annoying, uninformative, directionless…blah blah… error. And, kindly pardon me for blogging about this error very lately. Better late than never and here it goes.
What are the actual errors?
1) Can't find P/Invoke DLL sqlceme30.dll
2) Can't find P/Invoke DLL sqlceme35.dll
3) Can't find P/Invoke DLL sqlceme40.dll
What exactly this error means?
When a managed assembly (In our case, System.Data.SqlServerCe.dll) is trying to P/Invoke a method on to a native DLL (In our case, sqlcemeNN.dll; where NN stands for version of product 30, 35 …etc), system has failed to find the DLL to load and invoke the method.
When do we get this error?
We get this error when system cannot find the DLL in the system path, or current process executable path.
How can one land in this error? What are the probable workarounds or fixes?
There are multiple cases and some of the well known ones are given below:
1) Prior to .NET CF 2.0 SP2, there is no concept of GAC on storage card. And, if you have installed SQL CE Cab on storage card with .NET CF 2.0 RTM/SP1 on device, our native DLLs end up on storage card and the GAC on the main memory. Hence, managed assembly will fail when P/Invoking above method
a. Please use .NET CF SP2 and above
b. Please install the cabs on main memory
c. Please move to SQL CE 3.0 SP2/3.1 and above
2) You are developing the application for smart devices (Windows CE OS based) and using Visual Studio Auto Deployment (F5) feature. And, VS has failed to map the System.Data.SqlServerCe.dll to the right set of cabs to install and just deployed the System.Data.SqlServerCe.dll alone (Note: No error is thrown). In this case, the native DLLs are not deployed.
a. Fix the auto-deployment issues (Don’t ask me how L)
b. Remove and add the reference to System.Data.SqlServerCe. This is because, VS IDE stores assembly identity in the project file. Since we have changed the assembly version in SQL CE v3.5 SP1, removing and adding updates the solution to host the right assembly version
c.
Manually copy and install the SQL CE Cabs (all the 3 cabs). They are located under:
%VisualStudioInstallRoot%\SmartDevices\SDK\SQL Server\Mobile\v3.0\<platform>\<processor>
OR
%ProgramFiles%\Microsoft SQL Server Compact Edition\<version>\Devices\<platform>\<processor>
3) System has failed to load the sqlcemeNN.dll. To find more details on why system might have failed to load a module is discussed in previous blog post.
4) If your machine is a 64-bit box, you might have been got trapped into default target platform 'Any CPU' trap, please set the target platform as 'x86'. Need more details, please visit ErikEJ's blog post.
5)
In all other cases, please move to SQL CE 3.0 SP2/3.1 and above. If possible make sure HKLM\Software\Microsoft\Microsoft SQL Server Compact Edition\<Version>\NativeDir registry points to the directory where our native DLLs are installed. Please consider the WoW registry if running in WoW mode.
分享到:
相关推荐
要在C++中调用C# DLL,你需要使用P/Invoke(Platform Invoke)特性。这要求C# DLL导出带有`[DllImport]`属性的托管C样式函数,这样非托管C++代码才能识别并调用这些函数。 现在,我们转向QT的另一种构建系统——...
在C++代码中,通过P/Invoke(Platform Invoke)机制,可以调用C# DLL中的函数。P/Invoke允许托管代码(如C#)调用非托管代码(如C++或C)。 6. **Java工程**: 在Java工程中,声明本地方法并加载相应的JNI库。...
C#本身不直接支持这些原生API,因此我们需要通过P/Invoke(Platform Invoke)机制,调用C++编写的动态链接库(DLL)来与这些API交互。 P/Invoke是.NET Framework提供的一种特性,允许C#代码调用非托管代码(如C++)...
这一过程中,Platform Invoke (P/Invoke) 是关键所在,它可以实现在托管代码中调用非托管C++ API。 #### Platform Invoke (P/Invoke) P/Invoke是一种机制,允许.NET应用程序调用非托管的代码,如C或C++库。当.NET ...
但此操作在.NET Framework中并不是直接可用的,需要使用P/Invoke技术调用Windows API函数,例如`SetInterfaceInfo()`。 6. **权限和异常处理**: 自动更改IP地址通常需要提升的权限,因此,代码可能需要运行在具有...
使用MCI,我们需要通过P/Invoke技术调用Windows API函数。以下是一个使用MCI播放音频的例子: ```csharp using System.Runtime.InteropServices; [DllImport("winmm.dll", SetLastError = true)] public static ...
在C#中,我们可以通过P/Invoke(Platform Invoke)技术来调用这个API。P/Invoke允许.NET应用程序直接调用非托管(如Win32 API)的原生函数,将C#代码与底层系统功能相结合。 在"FindWindow"这个文件中,我们可以...
接下来,你可以利用UI Automation的各种API,如`AutomationElement.FindFirst()`、`InvokePattern.Invoke()`、`ValuePattern.SetValue()`等,来模拟用户行为,比如输入文本、点击按钮、读取结果等。 UI Automation...
然而,对于提取文件中的图标,我们通常不直接使用这个类,而是使用P/Invoke(平台调用)技术来调用Windows API。 2. **P/Invoke**:这是.NET Framework允许C#代码调用Win32 API的机制。我们需要使用`DllImport`特性...
C#中没有内置方法处理此操作,但可以使用P/Invoke技术调用Win32 API函数`ExtractIcon`。合并图标则需要创建一个新的图标文件,并将多个子图标添加到其中,这可以通过`CreateIconIndirect`函数实现。 3. **获取与...
这段代码通过P/Invoke技术调用了Windows API函数,如`LoadLibrary`、`ExtractIcon`和`GetIconInfo`来操作图标资源。`LoadLibrary`加载PE文件,`ExtractIcon`提取指定索引的图标,`GetIconInfo`获取图标的基本信息,...
FFmpeg本身是用C和C++编写的,为了在C#中使用,通常我们会借助P/Invoke技术,它是.NET Framework提供的一种机制,允许托管代码调用非托管(如C++ DLLs)代码。开发者需要定义相应的委托和结构体,以匹配FFmpeg库中的...
C# 代码可能会调用 P/Invoke 技术来与 C++ 编写的动态链接库(DLL)交互,以访问FFmpeg提供的功能。P/Invoke 允许托管代码(如 C#)调用非托管代码(如 C++),从而实现跨语言的通信。 C++ 部分,开发者可能会编写...
app.invoke("Quit", new Variant[]{}); ``` 通过以上步骤,你可以实现基本的Word文档操作。然而,jacob库的使用需要注意的是,因为它依赖于Windows的COM接口,所以它只适用于Windows操作系统,并且需要安装相应的...
2. 使用P/Invoke:在VB中,可以使用DllImport特性来导入Windows API函数,例如`FindResource`、`LoadResource`、`LockResource`、`UpdateResource`等。这个过程相对复杂,需要理解资源在PE文件中的存储方式。 3. ...
`jacob-1.18-M2-x64.dll`是用于64位Java环境的,而`jacob-1.18-M2-x86.dll`则是用于32位Java环境的。在使用Jacob之前,必须确保该dll文件已经被正确地添加到系统路径或者Java的classpath中,这样才能使Java程序能够...
CruiseYoung提供的带有详细书签的电子书籍目录 ... 该资料是《Visual C++ 2010入门经典(第5版)》的源代码及课后练习答案 对应的书籍资料见: Visual C++ 2010入门经典(第5版) ...原书名: Ivor Horton's Beginning ...
1. **P/Invoke 技术**:由于 FFmpeg 是用 C 语言编写的,因此在 C# 中使用时需要使用 Platform Invoke (P/Invoke) 技术,将 FFmpeg 的 C 函数导出并映射到 C# 中。 2. **FFmpeg 库的编译与链接**:首先需要获取 ...
- **本地管理组访问模块**:`usemodule situational_awareness/network/powerview/find_localadmin_access` - **列出域内所有的共享**:`usemodule situational_awareness/network/powerview/share_finder` - **...