EDIT: VS2013 is already available and I recommend it over VS2012. The tutorial is still kind of relevant though.

What is ArmA extension? It is essentially a .dll file (Dynamic Link Library) you can call from ArmA. Excited? Let’s get started. I will provide a simple step by step tutorial on how to compile a sample ArmA extension .dll in C++ using free Microsoft Visual Studio Express 2012. You can also do it with VS 2010, but it has no native threading support, and believe me, you will very much need it if you’re serious about your extensions.

  • Download Visual Studio Express 2012 for Windows Desktop from Microsoft website and install it.
  • Go to FILE and choose to create New Project:

ext1

  • Select Win32 Project and type ‘my1st’ into Name field then press OK:

ext2

  • Click on Application Settings and select DLL option then press Finish:

ext3

  • At this point you should see your my1st.cpp file open and ready for editing:

ext4

  • Copy the following code and paste it into my1st.cpp:
extern "C" { __declspec (dllexport) void __stdcall RVExtension(char *output, int outputSize, const char *function); } void __stdcall RVExtension(char *output, int outputSize, const char *function) { strncpy_s(output, outputSize, "IT WORKS!", _TRUNCATE); }
  • Change compiler option next to Debugger from “Debug” to “Release”, click green triangle to compile and agree to build it:

ext5

  • At this point if everything went well you should see a confirmation: “Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped” and the error message: “Unable to start program”. Ignore this error, this is because we have no main:

ext6

  • Your first ArmA extension .dll is now ready and you can collect it from Release folder:

ext7

  • Copy my1st.dll and paste it into ArmA 3 root directory. Open ArmA 3 Editor, place a unit and go to PREVIEW. Hit Esc and in the debug console type:
hint ("my1st" callExtension "");
  • Click LOCAL EXEC and you should see this:

ext_final

Did it work for you? If so, congratulations, you just made your first ArmA extension. I will be also making Part 2 to explain few things in detail.

Enjoy,
KK