Calling a function from a dynamically loaded DLL (version 2)
Certainly a better approach that the original. Only one 'flaw' that I noticed:


You ignore the return value from your convert function.


But I do have a couple of comments:


You may want to consider making line a const char * const (with associated other changes).
Put the type declaration next to the first use. i.e., rather than

HINSTANCE hinstLib;
// several lines
hinstLib = LoadLibrary(dllname.c_str());


do

HINSTANCE hinstLib = LoadLibrary(dllname.c_str());

Since you're in C++, use bool \ false etc rather than BOOL. 
Depending on how frequently this would be called, you may want to adopt a RAII approach similar to Windows DLL Module Class. This could lead to some simplifications in the main flow of the code.
LoadLibrary and GetProcAddress are documented as returning NULL rather than std::nullptr. It may be totally silly, but I'd stick with the documentation.
You don't deal with the error case of LoadLibrary failing, with respect to GetLastError and giving a sensible error.
Consider using a reinterpret_cast&lt;CONVERTPROC&gt; rather than (CONVERTPROC).
You only return 1 or 0 from call_convert_from_dll - should it have a bool or enumerated return type?
Depending on what the effect of failure is, you may want to consider using exceptions, catching them further up the chain rather than handling failure in this function.


For your convert function:


The code implies the use of using namespace std. Please don't.
Rather than using an err variable, you could return immediately. The function is short enough to be understandable.
If any exceptions are likely to be thrown by inner code, catch them separately in the catch block and give details rather than 'catch all and dump'. Perhaps something like:

catch (const std::exception&amp; e) {
    std::cerr &lt;&lt; "Convert exception: " &lt;&lt; e.what() &lt;&lt; std::endl;
    return 1;
}
catch (...) {
    std::cerr &lt;&lt; "Convert unspecified exception" &lt;&lt; std::endl;
    return 1;
}