Ndapi
A .NET wrapper for Oracle Forms Open API
Install / Use
/learn @felipebz/NdapiREADME
Ndapi
Oracle Forms ships with an Open API that allows C/C++ developers to open, edit, and compile module files (.fmb, .mmb, .olb, .pll). For Java developers, Oracle provides the JDAPI (Java Design-time API) a Java 2 wrapper around the same Open API functionality. However, JDAPI's pre-generics design and iterator-style collections often result in verbose and error-prone code.
Ndapi brings the power of the Open API to .NET, offering an idiomatic, strongly-typed API that feels natural to C# developers.
How Ndapi compares to JDAPI
Here’s a comparison of key points:
| | JDAPI (Java) | Ndapi (.NET) |
|----------------------|---------------------------------------------|------------------------------------------------|
| Language | Java 2 (pre-generics design) | C# with modern .NET features |
| Type Safety | Low (manual casting, raw collections) | High (strongly-typed, generics, LINQ support) |
| Iteration | Custom iterator (JdapiIterator) | Native .NET IEnumerable<T> |
| Memory Management | Manual (.destroy() calls required) | Automatic (IDisposable + using var) |
| Deployment | Requires JVM and Oracle native libraries | Requires .NET 8.0+ and Oracle native libraries |
| Package Distribution | Manual jar (not available on Maven central) | Distributed via NuGet |
Benefits of Ndapi:
- Leverages modern C# language features
- Strong compile-time type checking
- Simplified resource management (via
IDisposable) - Compatible with .NET Trimming and NativeAOT
Example: JDAPI vs Ndapi
JDAPI (Java)
FormModule module = FormModule.open(sourceFileName);
JdapiIterator programUnits = module.getProgramUnits();
while (programUnits.hasNext()) {
ProgramUnit programUnit = (ProgramUnit)programUnits.next();
String name = programUnit.getName();
// ...
}
Ndapi (C#)
using var module = FormModule.Open(sourceFileName);
foreach (var programUnit in module.ProgramUnits)
{
var name = programUnit.Name;
// ...
}
Supported Oracle Forms versions
| Oracle Forms | Architecture | OS | |--------------|--------------|----------------| | 6.0.8.22.1 | x86 | Windows | | 12.2.1.3 | x64 | Windows, Linux | | 12.2.1.4 | x64 | Windows, Linux | | 12.2.1.19 | x64 | Windows, Linux | | 14.1.2.0 | x64 | Windows, Linux |
Need support for a different version? Open an issue.
Installation
Stable releases
> dotnet add package Ndapi
Nightly / CI builds
> dotnet nuget add source "https://github.com/felipebz/ndapi/pkgs/nuget" --name "ndapi-dev"
> dotnet add package Ndapi --prerelease -s "ndapi-dev"
Platform target
- Forms 6i → compile your app for
x86 - Forms 12c/14c → compile your app for
x64
Related Skills
node-connect
351.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
110.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
351.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
351.4kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
