Oh, well, name mangling ... I am sure that the assembler will not do any name mangling. Either there is some #pragma directive in your C compiler that allows you to specify how to compile externs (for example, Watcom C/C++ allows that and it uses that itself for defining C calls, PASCAL calls and similar specifications). If such directive is available, then define "ASMCALL" - no underscores around, no uppercasing and so on - and make all your calls to assembler code ASMCALL. Or, you will need to define aliases in the assembler code:
public myproc:near
public _myproc:near
public myproc_:near
myproc:
_myproc:
myproc_:
push eax
...
This should suffice. The underscore is either prefixed of postfixed providing your externs are declared as "C". Try one such aliasing and see whether the corresponding error vanishes.